2-بستن ارتباط با بانک اطلاعاتی
obj.Close();
معرفی SqlDataAdapterخوب بعد از اینکه ارتباط را با بانک اطلاعاتی بر قرار کردیم نوبت به اجرای دستورات مورد نظر می رسد . از چند کلاس برای این کار می توان استفاده کرد که ما در این بخش SqlDataAdapter را معرفی میکنیم . قبل ازمعرفی نگاهی به انواع فرمانهایی که می توانیم اجرا کنیم را معرفی می کنیم .
1-StoredProcedure
2-Text
3-Table
اسامی بالا کاملاً مشخص هستند و نیاز به توضیح بیشتر ندارند البته در مثال هایی که در ادامه خواهد آمد آنها را بیشتر معرفی می کنیم .
طبق معمول برای استفاده از یک کلاس باید یک نمونه سازی از کلاس مربوطه انجام گیرد :
SqlDataAdapter cmd1 = new SqlDataAdapter (string selectCommandText,SqlConnection selectConnection);
البته این کلاس فراخوانی های متعددی دارد ولی معمول ترین آن به شکل بالا می باشد . اولین پارامتر رشته ای است که در آن دستور قرار می گیرد و در پارامتر دوم مسیر بانک اطلاعاتی قرار می گیرد .
به عنوان اولین مثال می خواهیم تمام اطلاعات دانشجویان را در یک datagrid نمایش دهیم :
اولین راه حل :
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True");
SqlDataAdapter cmd = new SqlDataAdapter("Select * From Student", con);
DataSet ds = new DataSet();
cmd.SelectCommand.CommandType = CommandType.Text;
cmd.Fill(ds, "Student");
dataGridView1.DataSource = ds.Tables["Student"];
dataGridView1.AutoGenerateColumns = true;
توضیح کد : همان طور که مشاهده می کنید در اولین خط مسیر بانک اطلاعاتی را مشخص کرده ایم اما در خط دوم یک متغیر جدید از نوع SqlDataAdapter استفاده که به عنوان اولین پارامتر به آن دستوری برای بازیابی تمام رکوردهای جدول دانشجویان و در پارامتر دوم مسیر بانک اطلاعاتی که قبل از آن مشخص کرده ایم قرار گرفته است .
در خط بهدی یک شیء از نوع DataSet استفاده کرده ایم . این کلاس برای ما می تواند پایگاه داده ها را به صورت مجازی در خود نگهداری کند . و دلیل استفاده از آن نیز این است که ما برای یک بار اطلاعات را از بانک اطلاعاتی می خوانیم و سپس ارتباط خود را با بانک اطلاعاتی قطع می کنیم و با اطلاعات موجود در DataSet کار می کنیم . به همین دلیل سرعت کار ما به مراتب بیشتر خواهد شد .
خوب به سراغ خط بعدی می رویم در این خط ما نوع دستوری را که میخواهیم اجرا کنیم را مشخص که در این مثال دستور ما از نوع متن Text است . البته به طور پیش فرض نیز این مقدار مورد استفاده قرار می گیرد . در خط بعدی از متد Fill در کلاس SqlDataAdapter استفاده کرده ایم که این دستور کاری که انجام می دهد بدین شکل است که بانک را باز و دستورمورد نظر را اجرا و نتایج آن را در DataSet ذخیره و سپس ارتباط را با بانک قطع می کند. بنابراین کار ما را راحت تر میکند.
خوب اما می خواهیم کمی مثال را توسعه دهیم . می خواهیم فقط رکوردهایی بازیابی شود که مقدار شماره دانشجویی آنها بیشتر از مقداری باشد که ما مشخص می کنیم :
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True");
SqlDataAdapter cmd = new SqlDataAdapter("Select * From Student Where sid >=@sid", con);
DataSet ds = new DataSet();
cmd.SelectCommand.CommandType = CommandType.Text;
cmd.SelectCommand.Parameters.AddWithValue("@sid", int.Parse(textBox1.Text));
cmd.Fill(ds, "Student");
dataGridView1.DataSource = ds.Tables["Student"];
dataGridView1.AutoGenerateColumns = true;
کد شباهت زیادی با کد بالا دارد اما تفوت هایی دارد در خط 2 در دستور پرس و جویی که وارد کرده ایم به این معنی اشاره کرده ایم که دانشجویانی که شماره دانشجویی آنها بزرگتر مساوی @sid باشد به ما نشان دهد . اما این مقدار از کجا مشخص می شود . ما در خط 5 مقدار مورد نظر خود را که در یک textbox ذخیره شده به پارامتر دستور ارسال کرده ایم.