تقييم الموضوع :
  • 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] اريد اظهار الجمع الموجود في داتا قريد لكل شهر يظهر في label rochdi191 8 270 منذ 2 ساعة مضت
آخر رد: rochdi191
  تعديل الكود عمور2016 5 138 , 12:29 AM
آخر رد: lafi
  عكس ترتيب الصفوف في داتا جريد atefkhalf2004 4 100 26-10-20, 08:07 PM
آخر رد: atefkhalf2004
  [VB.NET] هل من الضروري اغلاق الاتصال بعد جلب البيانات من sql في جملة الاستعلام alipro 3 103 26-10-20, 03:50 AM
آخر رد: Jounior_P
  [ تمّ الحل ] : عدم القدرة على عمل أتاش لقاعدة البيانات عبد العزيز البسكري 23 875 24-10-20, 12:48 AM
آخر رد: عبد العزيز البسكري
  مساعدة في داتا جريد فيو cordava 1 99 22-10-20, 08:09 PM
آخر رد: Lathe1
  [VB.NET] ربط التقارير بقاعده البيانات احمد سليمان 0 73 14-10-20, 02:43 PM
آخر رد: احمد سليمان
  ما الغلط في كود التعديل التالي برحوت 0 72 13-10-20, 09:11 PM
آخر رد: برحوت
Thumbs Up [SQL] تطبيق عملى لمشروع قاعدة بيانات بSQL محمود بكير 1 122 13-10-20, 03:39 PM
آخر رد: محمد كريّم
  حفظ list box في قاعدة البيانات اعينوني,,,,,,, KIKO1992 0 79 13-10-20, 11:08 AM
آخر رد: KIKO1992

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


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