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

সি শার্প টিউটোরিয়ালের আজকের পর্বে আপনাদের সবাইকে স্বাগতম জানাচ্ছি। আমরা সর্বশেষ পোষ্টে সি শার্প প্রজেক্টের ডাটা মাইএসকিউএল ডাটাবেইজে ইনসার্ট করার একটা পদ্ধতি দেখেছিলাম (পোষ্টটা এখানে পাবেন) এবং তার আগের পোষ্টে সি শার্প প্রজেক্টে মাইএসকিউএল ডাটাবেইজের কানেকশন দেওয়ার একটা পদ্ধতি দেখেছিলাম (পোষ্টটা এখানে পাবেন)। আজকের পোষ্টে আমরা সি শার্প প্রজেক্টে মাইএসকিউএল (MySQL) ডাটাবেইজের ডাটা সিলেক্ট করার একটা পদ্ধতি দেখব। সি শার্প প্রজেক্টের অনেকগুলো কাজে মাইএসকিউএল ডাটাবেইজের ডাটা ব্যবহার করতে হয়, যেমনঃ লগইন এর ক্ষেত্রে ইউজার আইডি আর পাসওয়ার্ড চেক করার জন্য, রেজিষ্ট্রেশন এর ক্ষেত্রে ইউজার আইডি চেক করার জন্য, … …
আজকের পোষ্টে আমরা দেখব কিভাবে মাইএসকিউএল ডাটাবেইজের ডাটা সি শার্পের স্ট্রিং ভ্যারিয়েবলে রাখতে হয়। পরবর্তী কোন পোষ্টে আমরা ডাটাগুলো কিভাবে .নেট ফ্রেমওয়ার্কের কম্বোবক্সে রাখতে হয় তা দেখব।
আমরা উদাহরনস্বরুপ একটা সি শার্প প্রজেক্ট নিয়ে কাজ করছি যেটা শুধুমাত্র ইউজারের নাম ডাটাবেইজে স্টোর/সেইভ করে রাখে। মনেকরুন আমাদের ডাটাবেইজের নাম “user” এবং আমরা “info” নামের টেবল/টেবিল এ ডাটা ইনসার্ট করব, যার দুইটা কলাম আছে যেগুলোঃ fname, lname।
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 এর ইন্সট্যান্সটা দিয়ে আমাদেরকে মাইএসকিউএল এর SelectCommand টা সেট করতে হবে। এটা একটা MySqlCommand। এজন্য আমরা নিচের সিনট্যাক্সটা অনুসরন করতে পারিঃ

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

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

string query = “select from table_name ….“;
adapter.SelectCommand = new MySqlCommand(query, conn);

৪। ডাটাবেইজ থেকে ডাটা সিলেক্ট করার জন্য MySqlDataReader ক্লাসের ইন্সট্যান্স ডিক্লায়ার করতে হবে। এটা ইনসার্ট, ডিলিট, এবং আপডেট এর জন্য লাগবে না। এজন্য আমরা নিচের সিনট্যাক্সটা অনুসরন করতে পারিঃ

	MySqlDataReader instance_name;

৫। এরপর আমাদের একটা স্ট্রিং ভ্যারিয়েবল এবং একটা ইন্টিজার ভ্যারিয়েবল লাগবে। স্ট্রিং ভ্যারিয়েবলটাতে আমরা ডাটাবেইজের ডাটা রাখব আর ইন্টিজার ভ্যারিয়াবল দিয়ে যতক্ষন ডাটাবেইজ থেকে ডাটা পাবে ততক্ষন স্ট্রিং ভ্যারিয়েবলের ইনডেক্স ১ করে বাড়াতে থাকব। সেজন্য ইন্টিজার ভ্যারিয়েবলটা ডিক্লায়ার করার সময় এর ভ্যালু ০ (শূন্য) ডিক্লায়ার করে দিতে হবে।
৬। এরপর আমরা বাকী কাজগুলো try-catch ব্লকের মধ্যে করব।
try ব্লকে আমরা ডাটা সিলেক্টের সবগুলো কাজ করব এবং catch ব্লকে শুধুমাত্র ডাটাবেইজ কানেকশনের কোন এরর থাকলে শুধুমাত্র সেটা ম্যাসেজ হিসেবে প্রিন্ট করব।
try ব্লকের শুরুতে আমাদেরকে ডাটাবেইজ কানেকশনটা অন করতে হবে। এজন্য আমাদেরকে MySqlConnection এর ইন্সট্যান্সটা দিয়ে আমরা MySqlConnection ক্লাসের Open() ফাংশনটা কল দিতে হবে।
এরপর আমাদেরকে কুয়েরীটা এক্সিকিউট করতে হবে। এজন্য আমাদেরকে MySqlDataAdapter এর ইন্সট্যান্সটা দিয়ে ExecuteReader() ফাংশনটা কল করতে হবে, এবং এই ফাংশনটা আমদেরকে MySqlDataReader এর যে ইন্সট্যান্স ডিক্লায়ার করেছি সেটাতে কল করতে হবে। এতে করে ডাটাবেইজ থেকে যে ভ্যালুগুলো পাবে সবগুলো MySqlDataReader এর ইন্সট্যান্সে স্টোর হবে। এই কল করার কোডটা অনেকটা নিচের মতঃ
মনেকরুন আমাদের MySqlDataReader ক্লাসের ইন্সট্যান্স reader এবং MySqlDataAdapter ক্লাসের ইন্সট্যান্স adapter, সেক্ষেত্রেঃ

	reader = adapter.SelectCommand.ExecuteReader();

নোটঃ ExecuteReader() ফাংশনটা শুধুমাত্র সিলেক্ট অপারেশনের কুয়েরীগুলোর ক্ষেত্রে কাজ করবে। ইনসার্ট, ডিলিট এবং আপডেট এর জন্য ExecuteNonQuery() ফাংশনটা ব্যবহার করতে হবে।

এখন আমাদের MySqlDataReader ক্লাসের ইন্সট্যান্সটা থেকে ডাটাবেইজের ডাটাগুলো আমাদেরকে আমাদের স্ট্রিং ভ্যারিয়েবলে রাখতে হবে। যেহেতু ইন্সট্যান্সটা ডাটাবেইজ থেকে একের অধিক ডাটা পেতে পারে (কুয়েরীর উপর নির্ভর করে) সেহেতু আমাদেরকে একটা লুপের মাধ্যমে ডাটাগুলো স্ট্রিং ভ্যারিয়েবলে রাখতে হবে। এজন্য আমরা while লুপ ব্যবহার করতে পারি এবং কন্ডিশন হিসেবে দিতে পারি MySqlDataReader_instance.Read(), এটার একটা কোড নিচের মত হতে পারে (মনেকরুন আমাদের MySqlDataReader ক্লাসের ইন্সট্যান্স reader) –

while(reader.Read())
{
     	…
     	//do your task
	     …
}

Read() ফাংশনটার কাজ হল এটা যতক্ষন পর্যন্ত reader ইন্সট্যান্স এ ডাটাবেইজের ভ্যালু পাবে ততক্ষন পর্যন্ত while লুপের কন্ডিশন true দিবে।

মনে রাখবেনঃ

আপনার ডাটাবেইজের টেবলে যদি n সংখ্যক কলাম থাকে তাহলে reader[0] তে আপনি ১ম কলামের ডাটা পাবেন, reader[1] এ আপনি ২য় কলামের ডাটা পাবেন,reader[2] তে আপনি ৩য় কলামের ডাটা পাবেন, … …, reader[n-1] এ আপনি n কলামের ডাটা পাবেন। সেক্ষত্রে ডাটাগুলোকে ToString() ফাংশন ব্যবহার করে সহজে স্ট্রিং ডাটা হিসেবে কনভার্ট করতে পারবেন। [কনভার্ট করার নিয়মঃ reader[0].ToString()]

৭। catch ব্লকে আমরা শুধুমাত্র ডাটাবেইজের কোন এরর থাকলে সেটা ম্যাসেজ হিসেবে দেখাব, সেটা যেকোন ম্যাসেজ হতে পারে।
আজকের পোষ্টের জন্য সম্পূর্ন একটা কোডের উদাহরনঃ

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace Selecting_Data
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] res = new string[100];
            int jj = 0;
            string connstr = "server=localhost; port=3306; database=user; username=root; password=;";
            MySqlConnection conn = new MySqlConnection(connstr);
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            MySqlDataReader reader;
            string qry = "select * from info";
            adapter.SelectCommand = new MySqlCommand(qry, conn);
            try
            {
                conn.Open();
                reader = adapter.SelectCommand.ExecuteReader();
                while(reader.Read())
                {
                    res[jj++] = reader[0].ToString() + " " + reader[1].ToString();
                }
                res[jj] = "\0";
                conn.Close();
                for (int i = 0; i < jj; i++)
                {
                    Console.WriteLine(res[i]);
                    Console.WriteLine();
                }
                Console.ReadKey();
            }
            catch(MySqlException Ex)
            {
                Console.WriteLine("Error:\n" + Ex.Message);
                Console.ReadKey();
            }
        }
    }
}

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

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

সি শার্প টিউটোরিয়ালের আজকের পর্বে আপনাদের সবাইকে স্বাগতম জানাচ্ছি। আজকের পোষ্টে আমরা সি শার্প প্রজেক্টের ডাটা মাইএসকিউএল (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");
            }
        }
    }
}

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

বেসিক সি প্রোগ্রামিং – শুরুর কথা

বর্তমান সময়ের জনপ্রিয় এবং বহুল ব্যবহৃত প্রোগ্রামিং ল্যাঙ্গুয়েজের মধ্যে সি অন্যতম। আধুনিক প্রোগ্রামিং ল্যাঙ্গুয়েজের যাত্রা শুরু হয় সি দিয়ে। বর্তমানে যেসব প্রোগ্রামিং ল্যাঙ্গুয়েজ জনপ্রিয়তার শীর্ষে আছে সেসব গুলোর কোন না কোন অংশ সি থেকে নেওয়া হয়েছে। যেমনঃ সি++, পিএইচপি, জাভা, সি#…
ড্যানিস রিচি (১৯৬৯ – ১৯৭২ সালের মধ্যে)AT&T ল্যাবরেটরীতে সি ডেভেলপ করেন। সি প্রোগ্রামিং ল্যাঙ্গুয়েজ তৈরি করার প্রধান উদ্দেশ্য ছিল ইউনিক্স অপারেটিং সিস্টেম। সি প্রোগ্রামিং এর সম্পর্কে আরো বিস্তারিত জানতে চাইলে এখানে দেখতে পারেন

এই পোষ্ট থেকে আমি নিয়মিত সি প্রোগ্রামিং ল্যাঙ্গুয়েজ সম্পর্কে আপনাদের ধারনা দেওয়ার চেষ্টা করব। আশাকরি সবগুলো পোষ্ট শেষ হলে আপনারা সি প্রোগ্রামিং সম্পর্কে ভাল একটা ধারনা পাবেন এবং সি প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে নিজ থেকে প্রোগ্রাম লিখতে পারবেন।
সি প্রোগ্রামিং শুরু করার আগে আপনাদেরকে কে একটা কম্পাইলার ডাউনলোড করতে হবে। সি প্রোগ্রামিং এর জন্য কয়েকটা ভাল কম্পাইলার আছে, নিচে আমি দুইটা কম্পাইলারের ডাউনলোড লিংক দিলাম, আপনাদের পছন্দ অনুযায়ী যে কোন একটা কম্পাইলার ডাউনলোড করতে পারেনঃ আমি দুইটা কম্পাইলারে কিভাবে সোর্সকোড কম্পাইল করতে হয় বলে দিব।
১। Code::Blocks
২। Orwell Dev C++

কম্পাইলার কি এবং কেন লাগে?
কম্পাইলার হল একটা সফটওয়্যার যেটা প্রোগ্রামিং ল্যাঙ্গুয়েজের সোর্সকোডকে মেশিন লেভেল কোডে কনভার্ট করে।
প্রোগ্রাম কম্পাইল না করলে কি হয়?
আপনি যখন একটা প্রোগ্রাম লিখবেন তখন মেশিনকে অবশ্যই বুঝতে হবে আপনার কোডটা কি কাজ করবে। মেশিন যদি আপনার কোড না বুঝে তাহলে কোড লিখে লাভটাই কি!!
মেশিন 0 এবং 1 ছাড়া আর কিছু বুঝে না। এখন আপনার কোডটা মেশিনকে বুঝাতে হলে মেশিন যেভাবে বুঝে ঠিক ঐইভাবে আপনার কোড কনভার্ট করতে হবে। আপনার হয়ে সে কাজটা করার জন্য কম্পাইলার ব্যবহার করতে হবে।

সিনট্যাক্সঃ প্রতিটি প্রোগ্রামিং ল্যাঙ্গুয়েজের একটা নির্দিষ্ট সিনট্যাক্স থাকে। সি প্রোগ্রামিং এর জন্য একেবারে সহজ সিনট্যাক্স হলঃ

<header files>
int main()
{
	//your task goes here
	return 0;
}

মনে রাখার সুবিধার্তেঃ
একটা সি প্রোগ্রামের সোর্সকোডে এক বা একাধিক হেডার ফাইলস থাকবে। একটা মেইন ফাংশন থাকবে। মেইন ফাংশনের মধ্যে প্রোগ্রামটা কি কাজ করবে সেগুলো কোড হিসেবে লেখা হবে।
হেডার ফাইলস কেন লাগে?
আপনারা যারা আগে কোন প্রোগ্রামিং ল্যাঙ্গুয়েজ শিখেছেন তারা এটা জানেন যে প্রোগ্রামে অনেকগুলো ফাংশন ব্যবহার করতে হয়, যার কিছু প্রোগ্রামিং ল্যাঙ্গুয়েজের নিজস্ব এবং কিছু ব্যবহারকারী নিজেই তৈরি করে। প্রোগ্রামিং ল্যাঙ্গুয়েজের নিজস্ব ফাংশনগুলো ব্যবহার করার জন্য হেডার ফাইলস লাগে। আর ব্যবহারকারী নিজে যেসব ফাংশন তৈরি করে সেগুলোর জন্য লাগে প্রটোটাইপ।
ফাংশন কি? কিভাবে ব্যবহার করা হয়? ব্যবহারকারী কিভাবে ফাংশন তৈরি করে? তা আমরা অন্য কোন পোষ্টে শিখব।

মেইন ফাংশনের কেন লাগে?
মেইন ফাংশনকে আপনি প্রোগ্রামিং ল্যাঙ্গুয়েজের হার্ট বলতে পারবেন। কারন কম্পাইলার যখন কম্পাইল শুরু করে তখন প্রথমে সেটা প্রোগ্রামের মেইন ফাংশন কোথায় আছে তা দেখে এবং মেইন ফাংশন থেকে সোর্সকোড কম্পাইল শুরু করে।

সি প্রোগ্রামিং এ তোমার আপনার প্রথম প্রোগ্রামঃ
আশাকরি আপনারা কম্পাইলার ডাউনলোড করেছেন। যারা Dev C++ ডাউনলোড করেছেন তারা File > New > Source File এ ক্লিক করুন অথবা শর্টকাট ctrl + N প্রেস করুন। তাহলে আপনার নিচের ছবির মত একটা ট্যাব পাবেন।

Dev C++

Dev C++


যারা Code::Blocks ডাউনলোড করেছেন তারা File > New > Empty File এ ক্লিক কর অথবা শর্টকাট ctrl + shift + N প্রেস করুন। তাহলে আপনার নিচের ছবির মত একটা ট্যাব পাবেন।
Codeblocks

Codeblocks


এরপর নিচের কোডটা লিখুন এবং ফাইলের ফরম্যাট .c দিয়ে সেইভ করুন।
*.c [উদাহরনঃ mycode.c program.c abcdef.c, … …]
কোডঃ

#include <stdio.h>
int main()
{
	printf("Hello World!! This is my first C Program\n");
return 0;
}

উপরের কোডটা লেখা হলে তোমার কোড এবার কম্পাইল করতে হবেঃ
যারা Dev C++ ব্যবহার করছেন তারা কম্পাইল করার জন্য Execute > Compile & Run এ ক্লিক করুন অথবা শর্টকাট F11 প্রেস করুন।
যারা Code::Blocks ব্যবহার করছেন তারা কম্পাইল করার জন্য Build > Build & Run এ ক্লিক করুন অথবা শর্টকাট F9 প্রেস করুন।
এরপর আপনার নিচের ছবির মত আউটপুট স্ক্রীন এবং আউটপুট দেখতে পাবেন।
Output Screen
উপরের কোডটা বুঝতে পারলে এবার আপনি নিজের নাম প্রিন্ট করার জন্য একটা কোড লেখার চেষ্টা করুন।
আশাকরি আপনারা এই পোষ্টটি বুঝতে পেরেছেন।