منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة في إستدعاء Method
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم اخوانى 
عندى مشكلة في استدعاء ميثود .. والمشكلة كالاتى
انا عامل ميثود عباره عن لوب داخل الدتا جريد فيو بعدين بتعمل طرح ما بين قيمتين .. المهم هذه الميثود انا استدعتها بعد عمليه الاضافه مباشرة ولكن المشكلة ان الميثود مش بتشتغل بعد عمليه الاضافه مباشرة  .. ولكن اذا استدعيت هذه الميثود عن طريق اضافتها في زر بتشتغل تمام من غير اي مشاكل .. 

هذا هو كود الاضافه 
كود :
               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]
هل تستخدم قاعدة بيانات اكسس ؟ ربما نسيت الاتصال مفتوح وبالتالي اخذ البرنامج وقت لكي يحدث البيانات

ارجو توضيح المزيد من الكود المستخدم
اخي طريقة التعامل هذه مع البيانات تؤدي دائما لسلوك غير متوقع

الاسلوب الافضل هو استخدام 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);) {


}

هكذا تضمن ان كائن الاتصال لن يعيش طويلا
(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);) {


}

هكذا تضمن ان كائن الاتصال لن يعيش طويلا

السلام عليكم اخوي 

عملت اللى قولتلي عليه ولكن للاسف المشكلة مازالت موجوده 
طيب اعطنا مثال صغير نعدل عليه ونتتبع المشكلة
(01-12-20, 11:56 AM)Anas Mahmoud كتب : [ -> ]طيب اعطنا مثال صغير نعدل عليه ونتتبع المشكلة

شكرا جداً اخوي .. تم حل المشكلة .. العيب كان من عندي انا 
ولكن لي استفسار بسيط
فى الكود بتاعي بتاع الاضافه في الاول انا فاتح الاتصال وبعد الاضافه مباشرة قفلت الاتصال .. سؤالي هو اين المشكلة في الاتصال .. اقصد يعني الاتصال مقفول فعلا وليس حياً كما ذكرت سابقاً .. بتمني توضيح اكتر لفكرتك .. شكراً مقدماً
احيانا يسبب مشاكل تبقى البيانات معلقة الى ان يحين وقت ال Timeout

نظريا نعم طالما تفتح الاتصال وتغلقه لن يحدث مشاكل

ولكن يبقى الاسلوب غير امن لانه معتمد على ان لا تنسى ان تغلق الاتصال

واذا كان البرنامج كبير بما يكفي وحدث مشكلة بسبب اتصال مفتوح لن يكون تتبع الامر بسيط

اسلوب using ليس معتمد على ذلك ، بعد نهاية جملة using ينتهي الكائن ويغلق الاتصال تماما

وهو الاسلوب المتبع من مايكروسوفت نفسها : https://docs.microsoft.com/en-us/dotnet/...at-ext-5.0
(01-12-20, 01:24 PM)Anas Mahmoud كتب : [ -> ]احيانا يسبب مشاكل تبقى البيانات معلقة الى ان يحين وقت ال Timeout

نظريا نعم طالما تفتح الاتصال وتغلقه لن يحدث مشاكل

ولكن يبقى الاسلوب غير امن لانه معتمد على ان لا تنسى ان تغلق الاتصال

واذا كان البرنامج كبير بما يكفي وحدث مشكلة بسبب اتصال مفتوح لن يكون تتبع الامر بسيط

اسلوب using ليس معتمد على ذلك ، بعد نهاية جملة using ينتهي الكائن ويغلق الاتصال تماما

وهو الاسلوب المتبع من مايكروسوفت نفسها : https://docs.microsoft.com/en-us/dotnet/...at-ext-5.0


شكراً جداً اخوي على معلوماتك القيمه

دمت بالف خير