رسالة خاصة بالإتصال ولا أدرى ما المشكلة ؟؟؟ - a.amin - 19-10-12
السلام عليكم ورحمة الله وبركاته
لدى مشروع ويعمل والحمد الله على أكمل وجه وعند فحص المشروع بالكود اناليزر وجدت هذا التحذير ولا ادرى كيف السبيل لمعالجته
[HTML]CA2202 Do not dispose objects multiple times Object 'cn1' can be disposed more than once in method 'add_mo_sa_to_all.btn_save_Click(Object, EventArgs)'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 323 Sayadla add_mo_sa_to_all.vb 323
[/HTML]
الكود المستخدم داخل هذا النموذج والذى يتم الإشارة الى تحذير به هو ( الجزء الملون باللون الأحمر )
.
كود :
' تأكيد حفظ البيانات
Dim y As DialogResult = MessageBox.Show("هل تريد حفظ بيانات الشهر", "تنبيه", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If y = DialogResult.Yes Then
Dim cn1 As New SqlConnection(Con_STR)
For i As Integer = 0 To DGV1.RowCount - 1
Dim cm As New SqlCommand("add_sa_m_data", cn1)
cm.CommandType = CommandType.StoredProcedure
cm.Parameters.Add("@mo_nm", SqlDbType.NVarChar, 50).Value = mo_nm_com.SelectedItem.ToString
cm.Parameters.Add("@e_id", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_id_col").Value.ToString
cm.Parameters.Add("@e_class_no", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_class_no_col").Value.ToString
cm.Parameters.Add("@e_nm", SqlDbType.NVarChar, 50).Value = DGV1.Rows(i).Cells("e_nm_col").Value.ToString
cm.Parameters.Add("@e_bran", SqlDbType.NVarChar, 50).Value = e_bran_com.SelectedItem.ToString
cm.Parameters.Add("@e_asasy", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_asasy_col").Value.ToString
cm.Parameters.Add("@e_omal", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_omal_col").Value.ToString
cm.Parameters.Add("@e_edafy_1_per", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_edafy_1_per_col").Value.ToString
cm.Parameters.Add("@e_edafy_1", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_edafy_1_col").Value.ToString
cm.Parameters.Add("@e_edafy_2_per", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_edafy_2_per_col").Value.ToString
cm.Parameters.Add("@e_edafy_2", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_edafy_2_col").Value.ToString
cm.Parameters.Add("@e_edafy", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_edafy_col").Value.ToString
cm.Parameters.Add("@e_bdl_entkal", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_bdl_entkal_col").Value.ToString
cm.Parameters.Add("@e_bdl_tmsel", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_bdl_tmsel_col").Value.ToString
cm.Parameters.Add("@e_bdl_estkbal", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_bdl_estkbal_col").Value.ToString
cm.Parameters.Add("@e_bdl_tfrogh", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_bdl_tfrogh_col").Value.ToString
cm.Parameters.Add("@e_bdl_raha", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_bdl_raha_col").Value.ToString
cm.Parameters.Add("@e_bdl_computer", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_bdl_computer_col").Value.ToString
cm.Parameters.Add("@e_bdl_tot", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_bdl_tot_col").Value.ToString
cm.Parameters.Add("@e_day_edafy", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_day_edafy_no_col").Value.ToString
cm.Parameters.Add("@e_day_edafy_tot", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_day_edafy_tot_col").Value.ToString
cm.Parameters.Add("@e_hour_edafy", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_hour_edafy_col").Value.ToString
cm.Parameters.Add("@e_tamen_per_1_26", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamen_per_1_26_col").Value.ToString
cm.Parameters.Add("@e_asay_tot", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_asay_tot_col").Value.ToString
cm.Parameters.Add("@e_elawa_1", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_elawa_1_col").Value.ToString
cm.Parameters.Add("@e_elawa_2", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_elawa_2_col").Value.ToString
cm.Parameters.Add("@e_elawa_3", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_elawa_3_col").Value.ToString
cm.Parameters.Add("@e_elawa_4", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_elawa_4_col").Value.ToString
cm.Parameters.Add("@e_elawa_5", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_elawa_5_col").Value.ToString
cm.Parameters.Add("@e_change", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_change_tot_col").Value.ToString
cm.Parameters.Add("@e_tamen_per_1_24", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamen_per_1_24_col").Value.ToString
cm.Parameters.Add("@e_tamenat", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamenat_col").Value.ToString
cm.Parameters.Add("@e_change_all", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_change_all_col").Value.ToString
cm.Parameters.Add("@e_mosthk_tot", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_mosthk_tot_col").Value.ToString
cm.Parameters.Add("@e_tamen_per_2_26", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamen_per_2_26_col").Value.ToString
cm.Parameters.Add("@e_tamen_per_14", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamen_per_14_col").Value.ToString
cm.Parameters.Add("@e_tamen_per_2_24", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamen_per_2_24_col").Value.ToString
cm.Parameters.Add("@e_tamen_per_11", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamen_per_11_col").Value.ToString
cm.Parameters.Add("@e_tamnen_egtmaey", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamnen_egtmaey_col").Value.ToString
cm.Parameters.Add("@e_day_no_mortb", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_day_no_mortb_col").Value.ToString
cm.Parameters.Add("@e_total_day_no_mortb", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_total_day_no_mortb_col").Value.ToString
cm.Parameters.Add("@e_tamen_ghyab_asasy_per_26", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamen_ghyab_asasy_per_26_col").Value.ToString
cm.Parameters.Add("@e_tamen_ghyab_change_per_24", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_tamen_ghyab_change_per_24_col").Value.ToString
cm.Parameters.Add("@e_day_geza_no", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_day_geza_no_col").Value.ToString
cm.Parameters.Add("@e_day_geza_tot", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_day_geza_tot_col").Value.ToString
cm.Parameters.Add("@e_mortb_tax", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_mortb_tax_col").Value.ToString
cm.Parameters.Add("@e_day_ghyab_no", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_day_ghyab_no_col").Value.ToString
cm.Parameters.Add("@e_day_ghyab_tot", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_day_ghyab_tot_col").Value.ToString
cm.Parameters.Add("@e_day_ghyab_mrdy_no", SqlDbType.Int).Value = DGV1.Rows(i).Cells("e_ghyab_mrdy_col").Value.ToString
cm.Parameters.Add("@e_day_ghyab_mrdy_tot", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_ghyab_mrdy_tot_col").Value.ToString
cm.Parameters.Add("@e_moda_tamen", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_moda_tamen_col").Value.ToString
cm.Parameters.Add("@e_alex_bank", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_alex_bank_col").Value.ToString
cm.Parameters.Add("@e_estktaat_tot", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_estktaat_tot_col").Value.ToString
cm.Parameters.Add("@e_safy_all", SqlDbType.Float).Value = DGV1.Rows(i).Cells("e_safy_all_col").Value.ToString
cn1.Open()
cm.ExecuteNonQuery()
[color=#FF0000][b] cn1.Close()[/b][/color]
Next
MessageBox.Show("تم حفظ البيانات", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Information)
e_bran_com.Enabled = True
mo_nm_com.Enabled = True
e_bran_com.SelectedIndex = -1
mo_nm_com.SelectedIndex = -1
DGV1.DataSource = Nothing
Else
Exit Sub
End If
طبعا الكود على وضعه السابق يعمل ولكنى قلق من التحذير وحابب انى افهمه
مع العلم اننى عندما نقلت جزء [HTML]cn1.Close()[/HTML] ليكون اسفل Next لا يظهر الكود اناليزر اى تحذير ولكن عند الحفظ تأتينى رسالة وهى
[HTML]The connection was not closed. The connection's current state is open.[/HTML]
فهل من توضيحات بارك الله فيكم
رسالة خاصة بالإتصال ولا أدرى ما المشكلة ؟؟؟ - amgadtamer - 19-10-12
عزيزى ال code analyzer ليس معيار قياسى للكود لذلك لا تتعامل معه على أنه ما دونه خطأ ولكن في الجزئيه التى ذكرتها هو محق حيث أنك قمت بغلق الإتصال طيب ماذا لو كان الإتصال أصلا مفلق سوف يظهر exception
وبالتالى قم بكتابة هذا الكود عند فتح الإتصال
PHP كود :
if con1.state=connection.closed then con1.open
end if
كما أن لديك خطأ كيف تقوم باستدعاء فتح الإتصال وغلقه داخل ال loop ؟؟؟؟؟؟؟؟؟؟؟؟
ايضا قم باضافة البارميتر خارج ال loop واسناد القيمة له داخل ال loop
رسالة خاصة بالإتصال ولا أدرى ما المشكلة ؟؟؟ - a.amin - 19-10-12
amgadtamer كتب :عزيزى ال code analyzer ليس معيار قياسى للكود لذلك لا تتعامل معه على أنه ما دونه خطأ ولكن في الجزئيه التى ذكرتها هو محق حيث أنك قمت بغلق الإتصال طيب ماذا لو كان الإتصال أصلا مفلق سوف يظهر exception
وبالتالى قم بكتابة هذا الكود عند فتح الإتصال
PHP كود :
if con1.state=connection.closed then con1.open
end if
كما أن لديك خطأ كيف تقوم باستدعاء فتح الإتصال وغلقه داخل ال loop ؟؟؟؟؟؟؟؟؟؟؟؟
ايضا قم باضافة البارميتر خارج ال loop واسناد القيمة له داخل ال loop
تم عمل اللازم بالنسبة للجزء الخاص بالإتصال بارك الله فيك
ولكن هناك جزء لم افهمه وارغب فى إيضاحه منك وهو " ايضا قم باضافة البارميتر خارج ال loop واسناد القيمة له داخل ال loop " فهل ممكن توضيح ذلك ولو بكتابة جزء من الكود للتوضيح ومن ثم سأقوم بإكمال الباقى
رسالة خاصة بالإتصال ولا أدرى ما المشكلة ؟؟؟ - amgadtamer - 19-10-12
PHP كود :
هكذا
' تأكيد حفظ البيانات Dim y As DialogResult = MessageBox.Show("هل تريد حفظ بيانات الشهر", "تنبيه", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If y = DialogResult.Yes Then Dim cn1 As New SqlConnection(Con_STR)
Dim cm As New SqlCommand("add_sa_m_data", cn1) cm.CommandType = CommandType.StoredProcedure cm.Parameters.Add("@mo_nm", SqlDbType.NVarChar, 50) cm.Parameters.Add("@e_class_no", SqlDbType.Int) If cn1.State = ConnectionState.Closed Then cn1.Open() End If For i As Integer = 0 To DGV1.RowCount - 1 cm.Parameters("@mo_nm").Value = mo_nm_com.SelectedItem.ToString cm.Parameters("@e_class_no").Value = DGV1.Rows(i).Cells("e_class_no_col").Value.ToString cm.ExecuteNonQuery() Next MessageBox.Show("تم حفظ البيانات", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Information) e_bran_com.Enabled = True mo_nm_com.Enabled = True e_bran_com.SelectedIndex = -1 mo_nm_com.SelectedIndex = -1 DGV1.DataSource = Nothing Else Exit Sub End If
رسالة خاصة بالإتصال ولا أدرى ما المشكلة ؟؟؟ - a.amin - 19-10-12
amgadtamer كتب :PHP كود :
هكذا
' تأكيد حفظ البيانات Dim y As DialogResult = MessageBox.Show("هل تريد حفظ بيانات الشهر", "تنبيه", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If y = DialogResult.Yes Then Dim cn1 As New SqlConnection(Con_STR)
Dim cm As New SqlCommand("add_sa_m_data", cn1) cm.CommandType = CommandType.StoredProcedure cm.Parameters.Add("@mo_nm", SqlDbType.NVarChar, 50) cm.Parameters.Add("@e_class_no", SqlDbType.Int) If cn1.State = ConnectionState.Closed Then cn1.Open() End If For i As Integer = 0 To DGV1.RowCount - 1 cm.Parameters("@mo_nm").Value = mo_nm_com.SelectedItem.ToString cm.Parameters("@e_class_no").Value = DGV1.Rows(i).Cells("e_class_no_col").Value.ToString cm.ExecuteNonQuery() Next MessageBox.Show("تم حفظ البيانات", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Information) e_bran_com.Enabled = True mo_nm_com.Enabled = True e_bran_com.SelectedIndex = -1 mo_nm_com.SelectedIndex = -1 DGV1.DataSource = Nothing Else Exit Sub End If
بارك الله فيك ولكن ما الغرض من كتابة الكود بتلك الطريقة ؟؟ وهل اذا كان هناك اى ستوردبروسيدجر اخر فيفضل كتابة الاكواد بالطريقة السابقة ( اضافة البارامتر اولا ) بالرغم من التصريح عنهم فى ستورد بروسيدجر سابقا - ثم ( اسناد قيمة له ثانيا ؟؟ )
رسالة خاصة بالإتصال ولا أدرى ما المشكلة ؟؟؟ - amgadtamer - 19-10-12
الفرق هو ال program performance
وهو توفير الذاكرة بمعنى هل من المعقول أن تقوم بعمل loop وليكن 200 تقوم باضافة ال parameter الى sqlparametercollection
200 مره وتفتح الاتصال وتغلقه 200 مره
فانت قمت بالتصريح عن البارميتر فى stored procedure لكن لابد من إضافة هذه البارميتر الى sqlcollectionparameters
فالفكرة ليست كتابة كود والسلام ولكن هو فهم كل سطر تقوم بكتابته
تحياتى
رسالة خاصة بالإتصال ولا أدرى ما المشكلة ؟؟؟ - a.amin - 19-10-12
amgadtamer كتب :الفرق هو ال program performance
وهو توفير الذاكرة بمعنى هل من المعقول أن تقوم بعمل loop وليكن 200 تقوم باضافة ال parameter الى sqlparametercollection
200 مره وتفتح الاتصال وتغلقه 200 مره
فانت قمت بالتصريح عن البارميتر فى stored procedure لكن لابد من إضافة هذه البارميتر الى sqlcollectionparameters
فالفكرة ليست كتابة كود والسلام ولكن هو فهم كل سطر تقوم بكتابته
تحياتى
اشكرك اخى امجد وكما اوضحت لك انا فى طور البدء والحمد لله
ما اقصده هنا هو اننى استخدم تلك الطريقة فى جميع اكوادى
كود :
cm.Parameters.Add("@e_elawa_1", SqlDbType.Float).Value = e_elawa_1_tx.Text.Trim.ToString
وما كنت استفسر عنه وفهمته منك ان هذا افضل لكى يكون اداء البرنامج كما يجب - فهل يجب تقسيم الكود الخاص بالبارمتر كما اوضحت ( اضافتهم ثم اسناد قيمة لهم ) فى جميع الحالات ام اننا هنا نتحدث عن حالة loop فقط ؟
رسالة خاصة بالإتصال ولا أدرى ما المشكلة ؟؟؟ - amgadtamer - 19-10-12
ما أقصده يتم في حالة ال loop
أما إضافة واحدة فقط يتم الإضافة والإسناد في سطر واحد
|