সি শার্প টিউটোরিয়াল – ৬ঃ সি শার্প প্রজেক্টে মাইএসকিউএল ডাটাবেইজের ইনসার্ট অপারেশন

সি শার্প টিউটোরিয়ালের আজকের পর্বে আপনাদের সবাইকে স্বাগতম জানাচ্ছি। আজকের পোষ্টে আমরা সি শার্প প্রজেক্টের ডাটা মাইএসকিউএল (MySQL) ডাটাবেইজে ইনসার্ট করার একটা পদ্ধতি দেখব। আমরা সর্বশেষ পোষ্টে সি শার্প প্রজেক্টে মাইএসকিউএল ডাটাবেইজ ব্যবহার করার একটা পদ্ধতি দেখেছিলাম। আজকের পোষ্টে ডাটা ইনসার্ট করার জন্য আমরা একই পদ্ধতি ব্যবহার করব। তাই আপনারা যারা আগের পোষ্টটি দেখতে পারেন নি তারা এখানে পোষ্টটি পাবেন
আমরা ডাটা ইনসার্ট করার জন্য যে পদ্ধতিটি ব্যবহার করব আমার জানা মতে সেটা একেবারে সহজ পদ্ধতি। আপনারা নিজের পছন্দ মত যেকোন একটা প্রজেক্টের জিইউআই/গুই (GUI) ডিজাইন করতে পারেন অথবা নিচের প্রজেক্টের মত একটা স্যাম্পল তৈরি করতে পারেন।
GUI of a simple C# project
উপরের ছবিতে আমরা উদাহরনস্বরুপ একটা সি শার্প প্রজেক্ট নিয়ে কাজ করছি যেটা শুধুমাত্র ইউজারের নাম ডাটাবেইজে স্টোর/সেইভ করে রাখে। মনেকরুন আমাদের ডাটাবেইজের নাম “user” এবং আমরা “info” নামের টেবল/টেবিল এ ডাটা ইনসার্ট করব।
simple mysql db structure
সি শার্প প্রজেক্টে মাইএসকিউএল ডাটাবেইজ ব্যবহার করার জন্য আমাদেরকে নিচের লাইব্রেরী/নেইমস্পেইসটা লিখতে হবেঃ

	using MySql.Data.MySqlClient;

ডাটাবেইজে ডাটা ইনসার্ট করার জন্য আমাদেরকে নিচের কয়েকটা পদ্ধতি অনুসরন করতে হবে।
১। ডাটাবেইজের কানেকশন দেওয়ার জন্য প্রথমে আমাদেরকে MySqlConnection ক্লাসের একটা ইন্সট্যান্স ডিক্লায়ার করতে হবে। এজন্য আমরা নিচের সিনট্যাক্সটা অনুসরন করতে পারিঃ

MySqlConnection instance_name = new MySqlConnection(string connection_string);

instance_name এর জন্য আমরা যেকোন নাম ব্যবহার করতে পারি [এগুলো ভ্যালিড নাম, যেমনঃ conn, _conn, conn_, conn1, etc. এগুলো ইনভ্যালিড নামঃ 1conn, @conn, etc]। MySqlConnection ক্লাসের ইন্সট্যান্স ডিক্লায়ার করার সময় প্যারামিটারে আমাদেরকে যে ডাটাবেইজটা ব্যবহার করব তার কানেকশন স্ট্রিং ডিক্লায়ার করতে হবে। মাইএসকিউএল ডাটাবেইজের জন্য আমরা নিচের কানেকশন স্ট্রিংটা ব্যবহার করতে পারিঃ

“server = server_link; port = port_number; database = database_name; username= username; password=password”

উপরের কানেকশন স্ট্রিংটা ছাড়া আমরা চাইলে নিচের কানেকশন স্ট্রিংটাও ব্যবহার করতে পারিঃ

“datasource = datasource_link; port = port_number; database = database_name; username= username; password=password”

যদি কোন কারনে আপনার নেটওয়ার্কের পোর্ট নাম্বার জানা না থাকে তাহলে আপনি চাইলে কানেকশন স্ট্রিং থেকে পোর্ট নাম্বারটা বাদ দিতে পারেন। সেক্ষেত্রে আমাদের কানেকশন স্ট্রিংটা এইভাবে লিখতে হবেঃ

“server = server_link; database = database_name; username= username; password=password”

আমরা চাইলে কানেকশন স্ট্রিং থেকে আমাদের ডাটাবেইজের নামটা বাদ দিতে পারি। এতে যে সমস্যাটা হয় তা হয় হলঃ ডাটাবেইজের কুয়েরীতে আমাদেরকে প্রতিবার টেবলের নামের আগে ডাটাবেইজের নামটা উল্লেখ করে দিতে হয়। যেমনঃ

select * from user.info;

উপরের কুয়েরীর user.info তে user হল ডাটাবেইজ আর info হল টেবল।
যদি আপনি WAMP/XAMPP অথবা অন্যকোন লোকাল সার্ভার (localhost) ব্যবহার করেন এবং localhost এর কোন তথ্য পরিবর্তন না করেন তাহলে আপনার কানেকশন স্ট্রিংটা অনেকটা নিচের কানেকশন স্ট্রিংটার মত হবেঃ
server/ datasource = localhost
port = 3306;
database_name = depends on you.
username = root;
password =
তাহলে সি শার্পের প্রজেক্টের জন্য আমাদের কানেকশন স্ট্রিংটা হবে অনেকটা নিচের মতঃ

MySqlConnection instance_name = new MySqlConnection("server = localhost;database = database_name; username=root; password=;";
);

আপনারা চাইলে কানেকশন স্ট্রিংটা একটা স্ট্রিং ভ্যারিয়েবলে রাখতে পারেন। যেক্ষেত্রে আমাদের কানেকশন স্ট্রিংটা অনেকটা নিচের মত হবেঃ

string connstr = "server = localhost;database = user; username=root; password=;";
MySqlConnection instance_name = new MySqlConnection(connstr);

২। এরপর ডাটা ইনসার্ট/ডিলিট/আপডেট/সিলেক্ট করার জন্য আমাদেরকে MySqlDataAdapter ক্লাসের একটা ইন্সট্যান্স ডিক্লায়ার করতে হবে। এজন্য আমরা নিচের সিনট্যাক্সটা অনুসরন করতে পারিঃ

MySqlDataAdapter instance_name = new MySqlDataAdapter();

৩। এরপর MySqlDataAdapter এর ইন্সট্যান্সটা দিয়ে আমাদেরকে মাইএসকিউএল এর InsertCommand টা সেট করতে হবে। এটা একটা MySqlCommand। এজন্য আমরা নিচের সিনট্যাক্সটা অনুসরন করতে পারিঃ

Instance_of_MySqlDataAdapter.InsertCommand = new MySqlCommand(string query, instance_of_ MySqlConnection);

এ কমেন্ডটা দুইটা প্যারামিটার ইনপুট নে। যার প্রথমটা হল কুয়েরী এবং দ্বিতীয়টা হল MySqlConnection এর ইনট্যান্স।
আমরা চাইলে কুয়েরীটা একটা স্ট্রিং ভ্যারিয়েবলে ডিক্লায়ার করতে পারি। যদি আমাদের MySqlConnection এর ইন্সট্যান্সটা conn এবং MySqlDataAdapter এর adapter ইন্সট্যান্সটা হয় সেক্ষেত্রে আমরা নিচের সিনট্যাক্স অনুসরন করতে পারিঃ

string query = “insert into table_name values ……“;
adapter.InsertCommand = new MySqlCommand(query, conn);

৪। এরপর আমরা বাকী কাজগুলো try-catch ব্লকের মধ্যে করব।
try ব্লকে আমরা ডাটা ইনসার্টের সবগুলো কাজ করব এবং catch ব্লকে শুধুমাত্র ডাটাবেইজ কানেকশনের কোন এরর থাকলে শুধুমাত্র সেটা ম্যাসেজ হিসেবে প্রিন্ট করব।
try ব্লকের শুরুতে আমাদেরকে ডাটাবেইজ কানেকশনটা অন করতে হবে। এজন্য আমাদেরকে MySqlConnection এর ইন্সট্যান্সটা দিয়ে আমরা MySqlConnection ক্লাসের Open() ফাংশনটা কল দিতে হবে।
এরপর আমাদেরকে কুয়েরীটা এক্সিকিউট করতে হবে। এজন্য আমাদেরকে MySqlDataAdapter এর ইন্সট্যান্সটা দিয়ে ExecuteNonQuery() ফাংশনটা কল করতে হবে।
নোটঃ ExecuteNonQuery() ফাংশনটা দিয়ে ইনসার্ট, ডিলিট, আপডেট এর কুয়েরীগুলো এক্সিকিউট করতে পারি। সিলেক্ট অপারেশনের কুয়েরীগুলোর ক্ষেত্রে ExecuteNonQuery()
ফাংশনটা দিয়ে কুয়েরীগুলো এক্সিকিউট হলেও যে ডাটাগুলো আম্মাদের কুয়েরীটা সিলেক্ট করবে সেগুলো দিয়ে কাজ করাটা মোটামুটি কঠিন কাজ/কাজ করা যায় না বললেও চলে। এই টপিক্সটা নিয়ে আমরা পরবর্তী কোন পোষ্টে আলোচনা করব।
আজকের পোষ্টের জন্য সম্পূর্ন একটা কোডের উদাহরনঃ

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace C_Sharp_Tutorial
{
    public partial class Login : Form
    {
        public Login()
        {
            InitializeComponent();
        }

        private void button_save_Click(object sender, EventArgs e)
        {
            string constr = "server = localhost;database = user; username=root; password=;";
            MySqlConnection conn = new MySqlConnection(constr);
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            string query = "insert into info values('" + textBox_firstname.Text + "','" + textBox_lastname.Text + "')";
            adapter.InsertCommand = new MySqlCommand(query, conn);
            try
            {
                conn.Open();
                adapter.InsertCommand.ExecuteNonQuery();
                MessageBox.Show("Informtation is added!", "Success");
                conn.Close();
            }
            catch(MySqlException Ex)
            {
                MessageBox.Show(Ex.Message, "Error");
            }
        }
    }
}

আশাকরি আজকের পোষ্টটা বুঝতে আপনাদের কোন সমস্যা হয় নি। পরবর্তী পোষ্টে আমরা সি শার্প প্রজেক্টে মাইএসকিউএল ডাটাবেইজের সিলেক্ট অপারশনের কাজ কিভাবে করতে হয় তা দেখব।

সি শার্প টিউটোরিয়াল – ৫ঃ সি শার্প প্রজেক্টে মাইএসকিউএল ডাটাবেইজের ব্যবহার

সি শার্প টিউটোরিয়ালের আজকের পোষ্টে আমরা দেখব কিভাবে সি শার্প প্রজেক্টে মাইএসকিউএল ডাটাবেইজ ব্যবহার করা হয়। সি শার্পে মাইএসকিউএল ডাটাবেইজ ব্যবহার করার জন্য আমাদেরকে মাইএসকিউএল এর একটা কানেকটর/ড্রাইভার ব্যবহার করতে হবে। যেটা .নেট কানেকটর নামে পরিচিত। আপনাদের যদি মাইএসকিউএল এর .net কানেকটর/ড্রাইভার না থাকে তাহলে পাশের লিংক থেকে কানেকটরটা ডাউনলোড করে নিতে পারেনঃ মাইএসকিউএল কানেকটরের লিংক। যদি কোন কারনে এই লিংকটা কাজ না করে তাহলে গুগলে সার্চ করে ডাউনলোড করতে পারেন।
ডাউনলোড করার পর আমাদেরকে মাইএসকিউএল এর কানেকটরটা ইন্সটল করতে হবে। আশাকরি আপনারা ইন্সটল করার কাজটা করতে পারবেন, তাই সে সম্পর্কে আর কিছু লিখলাম না।

সি শার্পের একটা প্রজেক্টে মাইএসকিউএল ডাটাবেইজ ব্যবহার করার জন্য আমাদেরকে মোটামুটিভাবে নিচের ধাপগুলো অনুসরন করতে হবেঃ
ধাপঃ ১ – প্রজেক্টের ডানপাশের “Solution Explorer” থেকে “References” এর উপর মাউসের রাইট ক্লিক করে “Add Reference” এ সিলেক্ট করতে হবে। কোন কারনে প্রজেক্টের ডানপাশে “Solution Explorer” বার না থাকলে আপনার উপরের মেনুতে “View” তে “Solution Explorer” পাবেন। কিছু না বুঝলে নিচের ছবিগুলো দেখুনঃ

Solution Explorer

Solution Explorer

mysql - 2

ধাপঃ ২ – আপনারা যারা ভিজুয়াল স্টুডিও ২০১০ অথবা আগের ভার্সন ব্যবহার করেন তারা ধাপ ১ শেষে আপনারা নিচের ছবির ডায়লগবক্সটা দেখতে পাবেনঃ

Add Reference Dialog box

Add Reference Dialog box

ধাপঃ ৩ – ডায়লগবক্সটিতে অনেকগুলো ট্যাব আছে। আমাদেরকে “.NET” ট্যাবটা সিলেক্ট করতে হবে। না বুঝলে নিচের ছবিটা দেখুন। ছবিতে যে ট্যাবে কালার করা হয়েছে আমাদেরকে ঐই ট্যাবটা সিলেক্ট করতে হবে।

Add Reference Dialog box

Add Reference Dialog box

ধাপঃ ৪ – উপরের ছবিতে “.NET” ট্যাবটা সিলেক্ট করার পর অনেকগুলো রেফারেন্স দেখা যাচ্ছে। এরপর আমাদেরকে ঐই রেফারেন্স লিস্টের নিচের থেকে মাইএসকিউএল এর “MySql.Data” রেফারেন্সটা সিলেক্ট করতে হবে। রেফারন্স লিস্টের কিছুটা নিচের দিকে গেলে “MySql.Data” রেফারেন্সটা পাওয়া যাবে।
mysql - 4

আপনারা যারা ভিজুয়াল স্টুডিও ২০১৩ ব্যবহার করেন তারা ধাপ ১ শেষে নিচের ডায়ালগ বক্সটা দেখতে পাবেন।
mysql - 5

এরপর ডায়ালগবক্স থেকে “Extensions” এ ট্যাবে যান। “Extensions” ট্যাবে কিছুটা নিচের দিকে গেলে MySql এর অনেকগুলো রেফারেন্স দেখতে পাবেন। এরপর “MySql.Data” রেফারেন্সটা সিলেক্ট করুন।
mysql - 6

ধাপঃ ৫ – এরপর যেসব ফর্ম/ওয়েবপেইজ এ মাইএসকিউএল ডাটাবেইজ ব্যবহার করার প্রয়োজন হবে সেসব ফর্ম/ওয়েবপেইজ এর সোর্সকোড ফাইলে (সোর্সকোড ফাইল না পেলে ফর্ম এর উপর মাউস দুইবার ক্লিক করুন অথবা মাউসের রাইট ক্লিক করে “View Code” সিলেক্ট করুন) নিচের কোডটা লিখতে হবেঃ

 using MySql.Data.MySqlClient;

এই ধাপগুলো অনুসরন করলে আমাদের প্রজেক্ট মাইএসকিউএল ডাটাবেইজ ব্যবহার করার জন্য তৈরি হয়ে যাবে।

আজকে আমরা শুধুমাত্র ডাটাবেইজের কানেকশনটা টেস্ট করে দেখব। এজন্য আমাদের যা যা লাগবেঃ
১। কানেকশন স্ট্রিং – কানেকশন স্ট্রিং এ আমাদেরকে মাইএসকিউএল ডাটাবেইজের সোর্স/হোস্টের অ্যাড্রেস, সোর্স/হোস্টের পোর্ট নাম্বার, ইউজারের নাম, পাসওয়ার্ড ডিক্লায়ার করতে হবে। কানেকশন স্ট্রিংটা আমরা একটা স্ট্রিং ভ্যারিয়েবলে রাখব। যেমনঃ

string connStr = “datasource = datasoure_address; port= port_number;  username = username; password = ****”;

আপনার ডাটাসোর্স যদি localhost হয় এবং আপনি যদি ডাটাসোর্সের কোন কিছু পরিবর্তন না করেন তাহলে port হবে 3306, username হবে root এবং password এ কিছু থাকবে না [যদি আপনি কোন পাসওয়ার্ড সেট না করেন]। সেক্ষেত্রে আমরা উপরের কানেকশন স্ট্রিংটাকে একটু পরিবর্তন করে localhost এর জন্য এইভাবে লিখতে পারিঃ

string connStr = “datasource = localhost; port= 3306;  username = root; password = ;”;

২। মাইএসকিউএল কানেকশনঃ এরপর আমাদেরকে MySqlConnection ক্লাসের একটা ইন্সট্যান্স ডিক্লায়ার করতে হবে। যেমনঃ

MySqlConnection conn = new MySqlConnection(string parameter);

এই ইন্সট্যান্স ডিক্লায়ার করার সময় আমাদেরকে একটা স্ট্রিং প্যারামিটার দিতে হবে। এই প্যারামিটারটা হবে কানেকশন স্ট্রিং। আমরা তাহলে উপরের ইন্সট্যান্সটা এইভাবে লিখতে পারিঃ

MySqlConnection conn = new MySqlConnection(connStr);

connStr ব্যবহার করার কারন হল আমরা আমাদের কানেকশন স্ট্রিংটাকে connStr ভ্যারিয়েবলে রেখেছি।
৩। মাইএসকিউএল ডাটাবেইজের কানেকশন টেষ্ট করার জন্য আমাদেরকে আপাতত আর কোন কিছু ডিক্লায়ার করতে হবে না। টেষ্টটা আমরা সবসময় সি শার্পের try-catch ব্লকের মধ্যে করব। সেক্ষেত্রে try ব্লকে আমাদের ডাটাবেইজের কানেকশন টেষ্টের সাথে সম্পর্কিত সবগুলো কোড লিখতে হবে আর catch ব্লকে শুধুমাত্র কোন এরর থাকলে কি ম্যাসেজ দিবে তার কোড লিখব। ডাটাবেইজের কানেকশন টেষ্ট করার জন্য অথবা ডাটাবেইজের সাথে সম্পর্কিত কোন কাজ করার জন্য শুরুতে আমাদেরকে ডাটাবেইজের কানেকশন অন করতে হবে যেটার জন্য আমাদেরকে ক্লাসের Open() ফাংশনটা কল করতে হবে।
এরপর আমরা আমাদের ডাটাবেইজের কাজগুলো করব (যেমনঃ ডাটা ইনসার্ট করা, সিলেক্ট করা, ডিলিট করা অথবা আপডেট করা), যেহেতু এই পোষ্টে আমরা শুধু কানেকশনটা টেষ্ট করব সেহেতু একটা ম্যাসেজ প্রিন্ট করাটাই হল আজকের পোষ্টে ডাটাবেইজের কাজ।
এরপর ডাটাবেইজের কাজ শেষ হলে আমাদেরকে ডাটাবেইজের কানেকশন অফ করে দিতে হবে যেটার জন্য আমাদেরকে ক্লাসের Close() ফাংশনটা কল করতে হবে।
সেক্ষেত্রে একটা কোড হতে পারে এই রকমঃ

try
{
      conn.Open();
      MessageBox.Show("Connection OK", "Success");
      conn.Close();
}
catch (MySqlException Ex)
{
      MessageBox.Show(Ex.Message, "Error");
}

সম্পূর্ন কোডঃ এক্ষেত্রে আমরা একটা বাটনের জন্য কোডটা লিখছি।

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button_mysql_connection_Click(object sender, EventArgs e)
        {
            string connStr = "datasource = localhost; port=3306; username=root; password=;";
            MySqlConnection conn = new MySqlConnection(connStr);
            try
            {
                conn.Open();
                MessageBox.Show("Connection OK", "Success");
                conn.Close();
            }
            catch (MySqlException Ex)
            {
                MessageBox.Show(Ex.Message, "Error");
            }
        }
    }
}

আশাকরি আজকের পোষ্টটা আপনারা সবাই বুঝতে পারছেন। পরবর্তি পোষ্টে আমরা সি শার্প প্রজেক্টে মাইএসকিউএল ডাটাবেইজের অন্য অপারেশনগুলোর কাজ কিভাবে করতে হয় তা দেখব।