تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
ما هو الخطا في الكود التالي ( نسخ البيانات من داتا قرايد فيو الى قاعدة البيانات )
#1
Dim CmdInsert As New SqlCommand
        With CmdInsert
            .Connection = Con
            .CommandType = CommandType.Text
            .CommandText = "Insert Into store_id (num , date , mowared , senfnum , q1 , q2 , price , currencey , currenceyrate , stornum)values( @num ,  @date ,  @mowared ,  @senfnum ,  @q1 ,  @q2 ,  @price ,  @currencey ,  @currenceyrate ,  @stornum)"
            .Parameters.Clear()
            For i As Integer = 0 To (DataGridView1.Rows.Count - 1)
                .Parameters.AddWithValue("@num", SqlDbType.Int).Value = Val(TextBox1.Text)
                .Parameters.AddWithValue("@date", SqlDbType.Date).Value = Dtpdate.Value
                .Parameters.AddWithValue("@mowared", SqlDbType.Int).Value = Val(TextBox2.Text)
                .Parameters.AddWithValue("@senfnum", SqlDbType.Int).Value = DataGridView1(0, i).Value.ToString
                .Parameters.AddWithValue("@q1", SqlDbType.Decimal).Value = DataGridView1(2, i).Value.ToString
                .Parameters.AddWithValue("@q2", SqlDbType.Decimal).Value = DataGridView1(3, i).Value.ToString
                .Parameters.AddWithValue("@price", SqlDbType.Decimal).Value = DataGridView1(6, i).Value.ToString
                .Parameters.AddWithValue("@currencey", SqlDbType.Int).Value = Val(TextBox9.Text)
                .Parameters.AddWithValue("@currenceyrate", SqlDbType.Decimal).Value = Val(TextBox10.Text)
                .Parameters.AddWithValue("@stornum", SqlDbType.Int).Value = DataGridView1(4, i).Value.ToString
            Next

            ' Try
            If Con.State = 1 Then Con.Close()
            Con.Open()
            CmdInsert.ExecuteNonQuery()
            Con.Close()
            MsgBox("تم إضافة السجل بنجاح", MsgBoxStyle.Information, "حفظ")
            CmdInsert = Nothing
            ' Catch ex As Exception
            ' 'Con.Close()
            '  MsgBox(Err.Description, MsgBoxStyle.Information)
            '  Finally
            If Con.State = ConnectionState.Open Then Con.Close()
        End With
        '   End Try

الخطا الذي يخرج يقول  

The variable name '@num' has already been declared. Variable names must be unique within a query batch or stored procedure.
الرد }}}
تم الشكر بواسطة:
#2
القيمة الموجودة في العمود num يجب أن لا تتكرر
إذا كان العمود num هو ترقيم تلقائي لا تضعه في الاستعلام
الرد }}}
تم الشكر بواسطة:
#3
العمود num ليس ترقيم تلقائي وليس مفتاح رئيسي
وفي قاعده البيانات خزنت فيه بيانات بنفس الرقم وقبلها البرنامج بدون مشكلة
الرد }}}
تم الشكر بواسطة:
#4
اتضح أن المشكلة في عملية إضافة Parameters
فكان يجب إدخال Parameters.Clear في الحلقة For وتكون أول سطر وتنفيذ الاستعلام ExecuteNonQuery يكون قبل Next مباشرة

هذا تعديل الكود
PHP كود :
Try
 
   If Con.State <> 1 Then Con.Open()
 
   Using CmdInsert As New SqlCommand
        With CmdInsert
            
.Connection Con
            
.CommandType CommandType.Text
            
.CommandText "Insert Into store_id (num , date , mowared , senfnum , q1 , q2 , price , currencey , currenceyrate , stornum)values( @num ,  @date ,  @mowared ,  @senfnum ,  @q1 ,  @q2 ,  @price ,  @currencey ,  @currenceyrate ,  @stornum)"
 
           For i As Integer 0 To (DataGridView1.Rows.Count 1)
 
               .Parameters.Clear()
 
               .Parameters.AddWithValue("@num"SqlDbType.Int).Value Val(TextBox1.Text)
 
               .Parameters.AddWithValue("@date"SqlDbType.Date).Value Dtpdate.Value
                
.Parameters.AddWithValue("@mowared"SqlDbType.Int).Value Val(TextBox2.Text)
 
               .Parameters.AddWithValue("@senfnum"SqlDbType.Int).Value DataGridView1(0i).Value.ToString
                
.Parameters.AddWithValue("@q1"SqlDbType.Decimal).Value DataGridView1(2i).Value.ToString
                
.Parameters.AddWithValue("@q2"SqlDbType.Decimal).Value DataGridView1(3i).Value.ToString
                
.Parameters.AddWithValue("@price"SqlDbType.Decimal).Value DataGridView1(6i).Value.ToString
                
.Parameters.AddWithValue("@currencey"SqlDbType.Int).Value Val(TextBox9.Text)
 
               .Parameters.AddWithValue("@currenceyrate"SqlDbType.Decimal).Value Val(TextBox10.Text)
 
               .Parameters.AddWithValue("@stornum"SqlDbType.Int).Value DataGridView1(4i).Value.ToString
                
.ExecuteNonQuery()
 
           Next
        End With
    End Using
    MsgBox
("تم إضافة السجل بنجاح"MsgBoxStyle.Information"حفظ")
Catch 
ex As Exception
    MsgBox
(Err.DescriptionMsgBoxStyle.Information)
Finally
 
   Con.Close()
End Try 
الرد }}}
تم الشكر بواسطة:
#5
اشكرك جزيلا اخي الفاضل على التفاعل والرد على سؤالي ولكن جربت ما كتبت وخرجت هذ الرساله
يوجد بالفعل DataReader مفتوح مقترن بـ Command ويجب أن يتم إغلاقه أولاً
في نفس الكود السابق مش لاقي اشي فيه غلط يا ريت تساعدني
وشكرا مقدما
الرد }}}
تم الشكر بواسطة:
#6
هذا الكود بعد التعديل :
ملاحظة أخي الكريم
الـ SqlCommand من صفاتة أنه يقوم بالتنفيذ على مستوى السجل الواحد فقط وركز على كلمة فقط إذا كان الأمر (INSERT أو UPDATE أو DELETE), ولا يقوم بتنفيذ أمر إدخال لجميع السجلات دفعة واحدة
المشكلة انك تقوم بعمل اللإتفاف (Loopعلى داتا قريد فيو موجودة لديك وفي كل لفة أنت تعيد إضافة نفس البراميترات في أمر SqlCommand 
في نهاية كل لفة يجب تنفيذ الأمر CmdInsert.ExecuteNonQuery لإرسال القيم في هذة اللفة (Loop
وعند دخولك على اللفة (Loop) الثانية تقوم بعمل Parameters.Clear ثم ترجع وتضيف البراميترات مرة أخرى بقيم أخرة وفي نهاية اللفة تنفذ CmdInsert.ExecuteNonQuery

أرجوا تكون وصلت الفكرة
هذة القاعدة تسري على INSERT و UPDATE و DELETE : كلهم يتم تنفيذهم على مستوى السجل الواحد
بمعنى لو عندك 100 سجل لإضافتهم لقاعدة البيانات : يجب أن تنفذ 100 أمر INSERT 

بمعنى لو عندك 100 سجل لتحديثهم لقاعدة البيانات : يجب أن تنفذ 100 أمر UPDATE 
بمعنى لو عندك 100 سجل لحذفهم لقاعدة البيانات : يجب أن تنفذ 100 أمر DELETE 

ما عدى SELECT : أمر واحد يجلب الكل
الرد }}}
تم الشكر بواسطة:
#7
تم حل المشكلة بفضل الله واشتغل الكود

Con.Close()


Dim cmd As New SqlCommand

Dim sql As String
For i As Integer = 0 To (DataGridView1.Rows.Count - 1)
sql = "Insert Into storedetail (num , datea , mowared , itemnum , q1 , q2 , price , currencey , currenceyrate , stornum)values( @num , @datea , @mowared , @itemnum , @q1 , @q2 , @price , @currencey , @currenceyrate , @stornum)"
cmd = New SqlCommand(sql, Con)
With cmd

.Connection = Con
.CommandType = CommandType.Text
.CommandText = "Insert Into storedetail (num , datea , mowared , itemnum , q1 , q2 , price , currencey , currenceyrate , stornum)values( @num , @datea , @mowared , @itemnum , @q1 , @q2 , @price , @currencey , @currenceyrate , @stornum )"
Con.Open()
.Parameters.Clear()
.Parameters.AddWithValue("@num", SqlDbType.Int).Value = Val(TextBox1.Text)
.Parameters.AddWithValue("@datea", SqlDbType.Date).Value = Dtpdate.Value
.Parameters.AddWithValue("@mowared", SqlDbType.Int).Value = Val(TextBox2.Text)
.Parameters.AddWithValue("@itemnum", SqlDbType.Int).Value = DataGridView1(0, i).Value.ToString
Try


.Parameters.AddWithValue("@q1", SqlDbType.Decimal).Value = DataGridView1(2, i).Value.ToString

.Parameters.AddWithValue("@q2", SqlDbType.Decimal).Value = DataGridView1(3, i).Value.ToString


.Parameters.AddWithValue("@price", SqlDbType.Decimal).Value = DataGridView1(6, i).Value.ToString
Catch ex As Exception

End Try

.Parameters.AddWithValue("@currencey", SqlDbType.Int).Value = Val(TextBox9.Text)
.Parameters.AddWithValue("@currenceyrate", SqlDbType.Decimal).Value = Val(TextBox10.Text)
.Parameters.AddWithValue("@stornum", SqlDbType.Int).Value = DataGridView1(4, i).Value.ToString




End With

cmd.ExecuteNonQuery()

Con.Close()
Next

MessageBox.Show("ok")
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] معرفة الخطا MOHAMMED ALZWI 0 29 أمس, 01:56 PM
آخر رد: MOHAMMED ALZWI
  [VB.NET] معرفة الخطا MOHAMMED ALZWI 2 33 أمس, 01:54 PM
آخر رد: MOHAMMED ALZWI
  هل من الممكن العمل على قاعدة بيانات اكسل على الفيجوال بيسك خالد كامل1 4 141 24-03-24, 02:00 AM
آخر رد: خالد كامل1
  مشكلة فى جمع عمود فى داتا جريد فيو احمد خطاب 3 160 06-03-24, 07:49 PM
آخر رد: احمد خطاب
  ممكن حل المشكلة فى الكود التالي - من مشاركة استاذنا القدير / عبدالله الدوسري new_programer 4 176 02-03-24, 07:36 PM
آخر رد: new_programer
  [C#.NET] طباعة بيانات داتا جرد فيو h2551996 0 94 25-02-24, 02:31 PM
آخر رد: h2551996
  [VB.NET] حل مشكلة الاتصال بقواعد البيانات access loay775 2 168 25-02-24, 06:29 AM
آخر رد: loay775
  ماهو حل هذا الخطأ في الكود melad2002 7 275 25-02-24, 12:25 AM
آخر رد: justforit
  كيفية انشاء سكريبت لقاعدة بيانات من خلال الكود heem1986 1 213 20-02-24, 12:00 AM
آخر رد: Kamil
  انشاء قاعدة بيانات من ملف سكربت strongriseman 5 507 17-02-24, 02:57 PM
آخر رد: strongriseman

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم