PDA

View Full Version : تفاوت SqlCommandو SqlCommandBuilder



majid_i68
شنبه 04 شهریور 1391, 16:32 عصر
سلام دوستان
تفاوت SqlCommandو SqlCommandBuilder در چیست ؟ چه موقع از SqlCommandBuilder استفاده میکنیم؟
تفاوت dataset و SqlDataReader در چیست؟ اگر ممکن است مثالی بزنید؟
باتشکر

majid_i68
شنبه 04 شهریور 1391, 17:38 عصر
هنوز منتظر هستم

veniz2008
شنبه 04 شهریور 1391, 19:18 عصر
سلام. شی aqlcommand زمانی استفاده میشه که شما مستقیما بخوای یه ک.ئری رو بر روی بانک اعمال کنید( مثلا یک دستور delete یا insert و ... رو بدون دخالت dataset یا datatable و ... بر روی بانک اعمال کنید). اما شی sqlcommandbuilder زمانی کاربرد داره که شما یک عمل ( یک کوئری) رو بر رویس دیتاست یا دیتاتیبل انجام دادید حالا اگر این تغییرات ایجاد شده در دیتاتیبل یا دیتاست رو با شی sqlcommandbuilder بر روی بانک اعمال نکنید عملا هیچ اتفاقی درون دیتابیس و جداول شما نمی افته. در ادامه دستور درج اطلاعات رو با هر دو روش براتون میزارم:
با استفاده از sqlcommand :

SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=university;Integrated Security=True");
SqlCommand cmd = new SqlCommand("insert into Dars values(@code,@Title,@unit)", con);
cmd.Parameters.AddWithValue("@code", txtcode.Text);
cmd.Parameters.AddWithValue("@Title", txttitle.Text);
cmd.Parameters.AddWithValue("@unit", txtunit.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
با استفاده از sqlcommand builder :

SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=university;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("select * from dars", con);
DataRow newRow;
DataSet ds = new DataSet();
da.Fill(ds, "Dars");
newRow = ds.Tables["Dars"].NewRow();
newRow["Code"] = txtcode.Text;
newRow["Title"] = txttitle.Text;
newRow["Unit"] = txtunit.Text;
ds.Tables["Dars"].Rows.Add(newRow);
cb = new SqlCommandBuilder(da);
da.InsertCommand = cb.GetInsertCommand();
da.Update(ds, "Dars");
در مورد تفاوت dataset و sqldatareader هم شاید اصلا درست نباشه که این دو شی رو با هم مقایسه کنیم. شی دیتاست یک شی بدون اتصال هستش( یعنی برای کار کردن با دیتاست شما نیازی به باز کردن کانکشن ندارید) ولی برای استفاده از sqldatateader که یک شی متصل هستش حتما بایستی قبلش کانکشن رو باز کنید. دیتاست بصورت جدولی هستش و معمولا زمانیکه قصد نمایش مجموعه ای از رکوردها رو با هم داریم ( مثل نمایش درون گریدویو) استفاده میشه و sqldatareader معمولا بر روی تک رکورد در هر لحظه کار انجام میده.

majid_i68
یک شنبه 05 شهریور 1391, 10:04 صبح
سلام با تشکر از شما اگر ممکم است این تو خط رو توضیح دهید خصوصا قسمت آخر رو
cb = new SqlCommandBuilder(da); da.InsertCommand = cb.GetInsertCommand();