الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[تنبيه - عنوان غير مناسب : ]طلب مساعدة ضروري جداً جداً

بدأه omar1978 في 11 مايو 2010 · 2 رد · 493 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أرجو منكم المساعدة في حل المشكلة التالية وهي :

لدي stored procedure له الصيغة التالية :

ALTER procedure [dbo].[insertreport] @wardianumber int,

@period nvarchar(50),

@wardia_date nvarchar(50),

@wardiamanager nvarchar(50),

@machinename nvarchar(200),

@machine_status nvarchar(50),

@machine_notice nvarchar(500)=null

as

insert into wardiatable (wardianumber,period,wardia_date,wardiamanager,machinename,machine_status,machine_notice)

values (@wardianumber,@period,@wardia_date,@wardiamanager,@machinename,@machine_status,@machine_notice)

وضمن الفورم كتبت الكود التالي :

sqlCommand1.Connection = sqlConnection1;

sqlCommand1.CommandType = CommandType.StoredProcedure;

sqlCommand1.CommandText = "insertreport";

sqlConnection1.Open();

for (int i=0;i<dataGridView1.RowCount;i++)

{

sqlCommand1.Parameters.Add("@wardianumber", SqlDbType.Int).Value = comboBox1.SelectedItem;

sqlCommand1.Parameters.Add("@period", SqlDbType.NVarChar, 50).Value = comboBox3.SelectedItem;

sqlCommand1.Parameters.Add("@wardia_date", SqlDbType.NVarChar, 50).Value = dateTimePicker1.Value;

sqlCommand1.Parameters.Add("@wardiamanager", SqlDbType.NVarChar, 50).Value = comboBox2.SelectedItem;

sqlCommand1.Parameters.Add("@machinename", SqlDbType.NVarChar, 200).Value = dataGridView1.Rows.Cells[0].Value;

sqlCommand1.Parameters.Add("@machine_status", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows.Cells[1].Value;

sqlCommand1.Parameters.Add("@machine_notice", SqlDbType.NVarChar, 500).Value = dataGridView1.Rows.Cells[2].Value;

sqlCommand1.ExecuteNonQuery();

}

وعند تنفيذ البرنامج تظهر الرسالة التالية : Procedure or function insertreport has too many arguments specified

وحتى عند إلغاء الحلقة for يتم التنفيذ مرة واحدة وإذا طلبت منه التنفيذ مرة أخرى تظهر نفس الرسالة

الرجاء المساعدة العاجلة وجزاكم الله كل خير

#2

آخي الكريم :

عندما تقوم بعملية

sqlCommand1.Parameters.Add("@wardianumber", SqlDbType.Int).Value = comboBox1.SelectedItem;

سواء في الحلقة التكرارية أو التنفيذ مرة ثانية ، فإنك تقوم بإضافة باميتر آخر بنفس الإسم wardianumber إلى سلسلة البارمترات وبذلك يتضاعف عدد البامترات لذلك يظهر Exception لأنك ترسل للإجرائية عددأ آكبر من البارمترات التي تحتاجها ...

الحل :

1- إما أن تقوم بعملية Clear للبامترات قبل إضافتها أي :

for (int i=0;i<dataGridView1.RowCount;i++)
{
sqlCommand1.Parameters.Clear();
sqlCommand1.Parameters.Add("@wardianumber", SqlDbType.Int).Value = comboBox1.SelectedItem;
sqlCommand1.Parameters.Add("@period", SqlDbType.NVarChar, 50).Value = comboBox3.SelectedItem;
sqlCommand1.Parameters.Add("@wardia_date", SqlDbType.NVarChar, 50).Value = dateTimePicker1.Value;
sqlCommand1.Parameters.Add("@wardiamanager", SqlDbType.NVarChar, 50).Value = comboBox2.SelectedItem;
sqlCommand1.Parameters.Add("@machinename", SqlDbType.NVarChar, 200).Value = dataGridView1.Rows.Cells[0].Value;
sqlCommand1.Parameters.Add("@machine_status", SqlDbType.NVarChar, 50).Value = dataGridView1.Rows.Cells[1].Value;
sqlCommand1.Parameters.Add("@machine_notice", SqlDbType.NVarChar, 500).Value = dataGridView1.Rows.Cells[2].Value;
sqlCommand1.ExecuteNonQuery();
}

2- أو تقوم بإضافة البارمترات آولاً ثم تقوم بعملية إسناد القيم إليها قبل إستدعاء الإجرائية :

    sqlCommand1.Parameters.Add("@period", SqlDbType.NVarChar, 50);
            sqlCommand1.Parameters.Add("@wardia_date", SqlDbType.NVarChar, 50);
            sqlCommand1.Parameters.Add("@wardiamanager", SqlDbType.NVarChar, 50);
            sqlCommand1.Parameters.Add("@machinename", SqlDbType.NVarChar, 200);
            sqlCommand1.Parameters.Add("@machine_status", SqlDbType.NVarChar, 50);
            sqlCommand1.Parameters.Add("@machine_notice", SqlDbType.NVarChar, 500);
            sqlCommand1.Parameters.Add("@wardianumber", SqlDbType.Int);
    for (int i = 0; i < dataGridView1.RowCount; i++)
            {

                sqlCommand1.Parameters["@wardianumber"].Value = comboBox1.SelectedItem;

//ونفس الآمر بالنسبة لبقية البارمترات 
 sqlCommand1.ExecuteNonQuery();
            }

تم تعديل هذه المشاركة بواسطة م. حسام فيصل في 12 مايو 2010 في 14:13

#3

الأخ الكريم/الأخت الكريمة

السلام عليكم ورحمة الله وبركاته

مرحباً بكم في منتدى الفريق العربي للبرمجة

نود تنبيهك أن العنوان غير مناسب.

الرجاء اختيار عنوان مناسب أكثر في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…