تقييم الموضوع :
  • 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")
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Information ما هو الخطاء في الكود ProgressBar1 Mostafa201255411 1 191 26-11-25, 08:19 PM
آخر رد: asmarsou
  كيف نستخرج نص الالتاريخ الاول من النص التالي: justforit 0 127 31-10-25, 05:33 PM
آخر رد: justforit
  [VB.NET] مساعدة تعديل على الكود ZEEN4ZEEN 2 209 08-10-25, 02:20 PM
آخر رد: salamandal
Rainbow [كود] تصحيح الخطاء في الكود محمد مسافر 2 1,051 28-08-25, 09:13 AM
آخر رد: محمد مسافر
Rainbow [كود] تصحيح الخطاء في الكود محمد مسافر 0 841 27-08-25, 04:05 PM
آخر رد: محمد مسافر
  تصدير البيانات إلى ملف RTF مصمم هاوي 4 823 15-08-25, 04:13 PM
آخر رد: أبو خالد الشكري
  [VB.NET] ما هو أفضل موقع استضافة لقواعد البيانات MSSQL ؟ mmaalmesry 0 796 16-07-25, 10:45 PM
آخر رد: mmaalmesry
  مساعدة في كيفية ترحيل البيانات من داتا قريدفيو إلى داتا قريدفيو في فيجوال بيسك ahmedfa71 13 2,221 09-07-25, 11:24 PM
آخر رد: أبو خالد الشكري
  مشكلة في حفظ البيانات مصمم هاوي 2 1,019 30-06-25, 08:51 AM
آخر رد: مصمم هاوي
  ما هو الخطأ فى هذا الكود خالد كامل1 10 1,138 28-05-25, 09:16 PM
آخر رد: خالد كامل1

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


يقوم بقرائة الموضوع: