المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 150 مرات في 105 مشاركات
30-11-20, 02:43 PM
(آخر تعديل لهذه المشاركة : 30-11-20, 03:07 PM {2} بواسطة maxruined.)
السلام عليكم اخوانى
عندى مشكلة في استدعاء ميثود .. والمشكلة كالاتى
انا عامل ميثود عباره عن لوب داخل الدتا جريد فيو بعدين بتعمل طرح ما بين قيمتين .. المهم هذه الميثود انا استدعتها بعد عمليه الاضافه مباشرة ولكن المشكلة ان الميثود مش بتشتغل بعد عمليه الاضافه مباشرة .. ولكن اذا استدعيت هذه الميثود عن طريق اضافتها في زر بتشتغل تمام من غير اي مشاكل ..
هذا هو كود الاضافه
كود :
con.Open();
cmd = new SqlCommand("insert into Cash (Account_Name,Date,Invoice_No,Department,Description,Debit,Credit,Project_Name,Remarks)values(@Account_Name,@Date,@Invoice_No,@Department,@Description,@Debit,@Credit,@Project_Name,@Remarks)", con);
cmd.Parameters.AddWithValue("Account_Name", cmbAccountName.Text);
cmd.Parameters.AddWithValue("Date", dateTimePicker1.Text);
cmd.Parameters.AddWithValue("Invoice_No", txtInvoiceNO.Text);
cmd.Parameters.AddWithValue("Department", txtDepartment.Text);
cmd.Parameters.AddWithValue("Description", txtDescription.Text);
cmd.Parameters.AddWithValue("Debit", txtDebit.Text);
cmd.Parameters.AddWithValue("Credit", txtCredit.Text);
cmd.Parameters.AddWithValue("Project_Name", txtProjectname.Text);
cmd.Parameters.AddWithValue("Remarks", txtRemarks.Text);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Add Successfully", "Add", MessageBoxButtons.OK, MessageBoxIcon.Information);
ClearBoxes();
FillData();
هذه إسم الميثود المراد تشغيلها بعد الاضافه CalculateBalance();
وهذه هي الميثود
كود :
double TDebit=0, TCredit=0, Results;
foreach(DataGridViewRow Loop in dataGridView1.Rows)
{
TDebit +=Convert.ToDouble(Loop.Cells[6].Value);
TCredit += Convert.ToDouble(Loop.Cells[7].Value);
}
Results = TCredit - TDebit;
txtbalance.Text = Results.ToString();
[b]بتمني من حد يساعدني في حل المشكلة دى .. شكراً مقدماً
[/b]
المشاركات : 476
المواضيع 33
الإنتساب : Mar 2014
السمعة :
175
الشكر: 366
تم شكره 1393 مرات في 471 مشاركات
هل تستخدم قاعدة بيانات اكسس ؟ ربما نسيت الاتصال مفتوح وبالتالي اخذ البرنامج وقت لكي يحدث البيانات
ارجو توضيح المزيد من الكود المستخدم
المشاركات : 476
المواضيع 33
الإنتساب : Mar 2014
السمعة :
175
الشكر: 366
تم شكره 1393 مرات في 471 مشاركات
اخي طريقة التعامل هذه مع البيانات تؤدي دائما لسلوك غير متوقع
الاسلوب الافضل هو استخدام SqlConnection محلي ينتهي بانتهاء العملية المطلوبة ، ابقاء كائن الاتصال حيا هو ما يسبب غالبا مشاكل عدم تحديث البيانات فعلا
الافضل ان تخزن نص الاتصال فقط بشكل عام ، وكل مرة نحتاج الى اتصال نقوم بعمل كائن اتصال SqlConnection باستخدام using
جرب ان تجعل الكود هكذا :
كود :
string connectionString = "نص الاتصال هنا";
string commandString = "insert into Cash (Account_Name,Date,Invoice_No,Department,Description,Debit,Credit,Project_Name,Remarks)values(@Account_Name,@Date,@Invoice_No,@Department,@Description,@Debit,@Credit,@Project_Name,@Remarks)";
using(SqlConnection conn = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(commandString, con);) {
cmd.Parameters.AddWithValue("Account_Name", cmbAccountName.Text);
cmd.Parameters.AddWithValue("Date", dateTimePicker1.Text);
cmd.Parameters.AddWithValue("Invoice_No", txtInvoiceNO.Text);
cmd.Parameters.AddWithValue("Department", txtDepartment.Text);
cmd.Parameters.AddWithValue("Description", txtDescription.Text);
cmd.Parameters.AddWithValue("Debit", txtDebit.Text);
cmd.Parameters.AddWithValue("Credit", txtCredit.Text);
cmd.Parameters.AddWithValue("Project_Name", txtProjectname.Text);
cmd.Parameters.AddWithValue("Remarks", txtRemarks.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
MessageBox.Show("Add Successfully", "Add", MessageBoxButtons.OK, MessageBoxIcon.Information);
ClearBoxes();
FillData();
CalculateBalance();
وكذلك عدل FillData لتستخدم اسلوب using :
كود :
using(SqlConnection conn = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(commandString, con);) {
}
هكذا تضمن ان كائن الاتصال لن يعيش طويلا
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 150 مرات في 105 مشاركات
(30-11-20, 10:01 PM)Anas Mahmoud كتب : اخي طريقة التعامل هذه مع البيانات تؤدي دائما لسلوك غير متوقع
الاسلوب الافضل هو استخدام SqlConnection محلي ينتهي بانتهاء العملية المطلوبة ، ابقاء كائن الاتصال حيا هو ما يسبب غالبا مشاكل عدم تحديث البيانات فعلا
الافضل ان تخزن نص الاتصال فقط بشكل عام ، وكل مرة نحتاج الى اتصال نقوم بعمل كائن اتصال SqlConnection باستخدام using
جرب ان تجعل الكود هكذا :
كود :
string connectionString = "نص الاتصال هنا";
string commandString = "insert into Cash (Account_Name,Date,Invoice_No,Department,Description,Debit,Credit,Project_Name,Remarks)values(@Account_Name,@Date,@Invoice_No,@Department,@Description,@Debit,@Credit,@Project_Name,@Remarks)";
using(SqlConnection conn = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(commandString, con);) {
cmd.Parameters.AddWithValue("Account_Name", cmbAccountName.Text);
cmd.Parameters.AddWithValue("Date", dateTimePicker1.Text);
cmd.Parameters.AddWithValue("Invoice_No", txtInvoiceNO.Text);
cmd.Parameters.AddWithValue("Department", txtDepartment.Text);
cmd.Parameters.AddWithValue("Description", txtDescription.Text);
cmd.Parameters.AddWithValue("Debit", txtDebit.Text);
cmd.Parameters.AddWithValue("Credit", txtCredit.Text);
cmd.Parameters.AddWithValue("Project_Name", txtProjectname.Text);
cmd.Parameters.AddWithValue("Remarks", txtRemarks.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
MessageBox.Show("Add Successfully", "Add", MessageBoxButtons.OK, MessageBoxIcon.Information);
ClearBoxes();
FillData();
CalculateBalance();
وكذلك عدل FillData لتستخدم اسلوب using :
كود :
using(SqlConnection conn = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(commandString, con);) {
}
هكذا تضمن ان كائن الاتصال لن يعيش طويلا
السلام عليكم اخوي
عملت اللى قولتلي عليه ولكن للاسف المشكلة مازالت موجوده
المشاركات : 476
المواضيع 33
الإنتساب : Mar 2014
السمعة :
175
الشكر: 366
تم شكره 1393 مرات في 471 مشاركات
طيب اعطنا مثال صغير نعدل عليه ونتتبع المشكلة
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 150 مرات في 105 مشاركات
(01-12-20, 11:56 AM)Anas Mahmoud كتب : طيب اعطنا مثال صغير نعدل عليه ونتتبع المشكلة
شكرا جداً اخوي .. تم حل المشكلة .. العيب كان من عندي انا
ولكن لي استفسار بسيط
فى الكود بتاعي بتاع الاضافه في الاول انا فاتح الاتصال وبعد الاضافه مباشرة قفلت الاتصال .. سؤالي هو اين المشكلة في الاتصال .. اقصد يعني الاتصال مقفول فعلا وليس حياً كما ذكرت سابقاً .. بتمني توضيح اكتر لفكرتك .. شكراً مقدماً
المشاركات : 476
المواضيع 33
الإنتساب : Mar 2014
السمعة :
175
الشكر: 366
تم شكره 1393 مرات في 471 مشاركات
احيانا يسبب مشاكل تبقى البيانات معلقة الى ان يحين وقت ال Timeout
نظريا نعم طالما تفتح الاتصال وتغلقه لن يحدث مشاكل
ولكن يبقى الاسلوب غير امن لانه معتمد على ان لا تنسى ان تغلق الاتصال
واذا كان البرنامج كبير بما يكفي وحدث مشكلة بسبب اتصال مفتوح لن يكون تتبع الامر بسيط
اسلوب using ليس معتمد على ذلك ، بعد نهاية جملة using ينتهي الكائن ويغلق الاتصال تماما
وهو الاسلوب المتبع من مايكروسوفت نفسها : https://docs.microsoft.com/en-us/dotnet/...at-ext-5.0
المشاركات : 186
المواضيع 33
الإنتساب : Dec 2018
السمعة :
1
الشكر: 187
تم شكره 150 مرات في 105 مشاركات
(01-12-20, 01:24 PM)Anas Mahmoud كتب : احيانا يسبب مشاكل تبقى البيانات معلقة الى ان يحين وقت ال Timeout
نظريا نعم طالما تفتح الاتصال وتغلقه لن يحدث مشاكل
ولكن يبقى الاسلوب غير امن لانه معتمد على ان لا تنسى ان تغلق الاتصال
واذا كان البرنامج كبير بما يكفي وحدث مشكلة بسبب اتصال مفتوح لن يكون تتبع الامر بسيط
اسلوب using ليس معتمد على ذلك ، بعد نهاية جملة using ينتهي الكائن ويغلق الاتصال تماما
وهو الاسلوب المتبع من مايكروسوفت نفسها : https://docs.microsoft.com/en-us/dotnet/...at-ext-5.0
شكراً جداً اخوي على معلوماتك القيمه
دمت بالف خير
|