مقدمه

در بخش ۷۲ نیز همانند بخش‌های پیشین در رابطه با دیتابیس و اضافه کردن آن به پروژه صحبت شد. در این بخش نیز قصد داریم به ادامه مبحث دیتابیس بپردازیم.

ارتباط دیتابیس با پروژه

برای برقرار ارتباط با دیتابیس، ما کلاسی را برای آن در نظر گرفته‌ایم تا همه ارتباطات را به‌دست گیرد. برای اینکار، ابتدا از منوی Project، گزینه Add Class را انتخاب می‌کنیم.

project_add_class

پنجره زیر برای شما نمایان می‌شود…

project_add_class2_new

ابتدا از اینکه گزینه Class انتخاب شده باشد اطمینان حاصل فرمایید. پس از آن، در باکس Name، اسم کلاس را DatabaseConnection.cs را قرار دهید. روی Add در نهایت کلیک کنید.

پس از آنکه Add را انتخاب کردید، کلاس جدید در Solution Explorer نمایان خواهد شد.

sol_explorer_class

کلاس را باز کرده تا محتوای آن را ببینید

class_code

(کاربران نسخه ۲۰۱۰ از ویژوال استودیو، عبارت Threading.Task را نخواهند دید.)

کلاسی که ساخته‌ایم، همانطور که از نامش پیداست، قرار است در ارتباط با دیتابیس ما را کمک کند. ما به آن متدها، متغیرها و propertyهایی را اضافه می‌کنیم تا بوسیله آن‌ها، این ارتباط صورت بگیرد.

اولین کاری که می‌بایست انجام دهیم ساخت دو متغیر است.

private string sql_string;

private string strCon;

همانند شکل زیر در کدهایتان قرار دهید

class_code2

متغیر sql_string، دستورات SQL را در خود نگهداری خواهد کرد. مثل:‌ SELECT * FROM table

ما این دستورات را از طریق Settings که در بخش قبل توضیح دادیم دریافت خواهیم کرد. متغیر strCon نیز محل دیتابیس را در خود نگهداری می‌کند که مجدد از Settings جلسه قبل آن را پیدا می‌کنیم.

کد بعدی‌ای که می‌بایست اضافه کنیم، یک property که فقط قابلیت نوشتن را داشته باشد. (یعنی get در آن تعریف نشده است.)

public string Sql {

set { sql_string = value;}

}

ما این Property را Sql می‌نامیم و از جنس رشته خواهد بود. value آن نیز همانطور که در کد مشخص است، در متغیر sql_string ذخیره خواهد شد.

property بعدی نیز connection_string خواهد بود که در مقدار value در متغیر strCon ذخیره خواهد شد. پس کدهای شما می‌بایست همه به‌شکل زیر باشند:

class_code3

در قدم بعدی، ما به شیءای به نام Dataset نیاز داریم. Dataset اطلاعات دیتابیس را در خود نگهداری می‌کند. هر سطر در Dataset، سطری از Database را در خود نگهداری خواهد کرد. پس از اینکه عملیات انتقال انجام شد، ارتباط با دیتابیس قطع می‌شود.

کد زیر را به کلاس اضافه کنید:

public System.Data.DataSet GetConnection

{

get { return MyDataSet();}

}

ما این Property را GetConnection می‌نامیم که بصورت Read-Only است. (یعنی تنها قابل خواندن است.)

در این Property ما متد MyDataSet را فرا می‌خوانیم؛ کار این متد ارتباط با دیتابیس و پر کردن DataSet از اطلاعات است. پس کد زیر را نیز بنویسید:

private System.DataSet MyDataSet()

{

}

اگر به متد فوق توجه کنید، به جای اینکه این متد از جنس String یا int باشد‌، از جنس System.DataSet است.

در قدم اول، کد زیر را داخل این متد اضافه کنید:

System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon);

متغیری که در کد بالا ساختیم نام آن con است. جنس این متغیر از SqlClient.SqlConnection است. ما یک شیء از این نوع می‌سازیم و متغیر strCon را در سازنده این شیء به SqlClient.SqlConnection پاس می‌دهیم.

کد بعدی، کد زیر است:

con.Open();

این کد ارتباط را به دیتابیس باز می‌کند. در واقع، جداول هنوز باز نشده‌اند، لذا برای اینکار ما نیاز به یک DataAdapter خواهیم داشت. DataAdapter به این دلیل استفاده می‌شوند تا جداول را در دیتابیس برای ما باز کند. پس از آن، ما باید این DataAdapter را در refrenceها پروژه قرار دهیم.

پس ما زیر دو متغیر قبل که تعریف کرده‌ایم، متغیر زیر را قرار می‌دهیم:

System.Data.SqlClient.SqlDataAdapter da_1;

به متد MyDataSet برگردید و کد زیر را بنویسید:

da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con);

در آرگومان‌های این متد می‌گوییم که ما کدام جدول را برای باز شدن می‌خواهیم.

خط بعدی مورد نیاز،‌ خط کد زیر است:

System.Data.DataSet dat_set = new System.Data.DataSet();

خط فوق یک شیء از DataSet ایجاد می‌کند که نام آن را dat_set قرار داده‌ایم. کل متد این DataSet را برخواهد گرداند.

و ۳ خط آخر مورد نیاز، کدهای زیر هستند:

da_1.Fill(dat_set, “Table_Data_1”);

con.Close( );

return dat_set;

خط ابتدا با استفاده از متد Fill، اقدام به پر کردن DataSet می‌کند. خط بعدی، ارتباط با دیتابیس را قطع می‌کند و خط پس از آن، مقدار dat_set را برمی‌گرداند.

کدهای شما سرجمع باید همه بصورت زیر شده باشد

class_code_all2