PDA

View Full Version : تفاوت con.closecon.dispose چسیت؟



Kurdia
چهارشنبه 20 شهریور 1392, 19:04 عصر
تفاوت دو دستور


con.close();
//---------------------
con.Dispose();

چیست
و چه موقع باید استفاده بشه(چهار عمل اصلی Insert, Delete, Update, Select)

parvizwpf
چهارشنبه 20 شهریور 1392, 20:08 عصر
شما هنگامی که close استفاده میکنید یعنی میخواید ارتباط اصلی خودتون با بانک رو ببندید دیگه اعمالی سمت کانکشن شما صورت نمیگیره. اما متد dispose که رابط شما با gc هست در واقع میگه که کل آبجکت کانکشن رو نابود کنید و از بین ببیرید.

esafb52
چهارشنبه 20 شهریور 1392, 22:42 عصر
ولی این dispose چرا به خوبی جواب نمیده؟؟!شما مثلا یه sqlcommand رو اضافه کنید و در آخر کار اون رو disposeکنید حالااگر رو پروژه کلیک راست و ران کد آنالیز رو بزنین تو قسمت هشدار ها پیام میده که
"Warning 1 CA2000 : Microsoft.Reliability : In method 'frmadduser.btnDelete_Click(object, EventArgs)', call System.IDisposable.Dispose on object 'cmd' before all references to it are out of scope.
"
کدهم اینه
SqlCommand cmd=new SqlCommand("DELETEuser",connection);
string username = dataGridView1.CurrentRow.Cells[0].Value.ToString();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@username", username);
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
cmd.Dispose();
frmadduser_Load(null, null);
MessageBox.Show("حذف شد");
ولی اگر از بلاک using استفاده بشه این مشکل دیگه نیست که اونهم یه سری ضعف داره!!!!!!

Kurdia
جمعه 22 شهریور 1392, 19:19 عصر
شما هنگامی که close استفاده میکنید یعنی میخواید ارتباط اصلی خودتون با بانک رو ببندید دیگه اعمالی سمت کانکشن شما صورت نمیگیره. اما متد dispose که رابط شما با gc هست در واقع میگه که کل آبجکت کانکشن رو نابود کنید و از بین ببیرید.

پس چطور استفاده کنیم
مثلا در انتهای کد ذخیره بگیم



con.close();
//----------و یا------
con.Dispose();