2013-06-27 4 views
4

У меня есть несколько строк в элементе управления DataGridView. И я хочу вставить каждую строку в базу данных. Я так пробовал. Но он дает ошибку, что параметр уже добавлен. Как добавить имя параметра один раз, а затем добавлять значения каждый раз и выполнять их каждый раз?VB.Net вставить несколько записей

Using connection As New SqlCeConnection(My.Settings.databaseConnectionString) 
     Using command As New SqlCeCommand("INSERT INTO table_master(item, price) VALUES(@item, @price)", _ 
             connection) 

      connection.Open() 

      For Each r As DataGridViewRow In dgvMain.Rows 
       If (Not String.IsNullOrWhiteSpace(r.Cells(1).Value)) Then 
        command.Parameters.AddWithValue("@item", r.Cells(1).Value.Trim) 
        command.Parameters.AddWithValue("@price", r.Cells(2).Value) 


        command.ExecuteNonQuery() 
       End If 
      Next 

     End Using 
    End Using 

ответ

5

Добавить параметры вне цикла и внутри обновления петли только их значения

Using connection As New SqlCeConnection(My.Settings.databaseConnectionString) 
    Using command As New SqlCeCommand("INSERT INTO table_master(item, price) VALUES(@item, @price)", _ 
            connection) 

     connection.Open() 

     ' Create and add the parameters, just one time here with dummy values or' 
     ' use the full syntax to create each single the parameter' 
     command.Parameters.AddWithValue("@item", "") 
     command.Parameters.AddWithValue("@price", 0) 

     For Each r As DataGridViewRow In dgvMain.Rows 
      If (Not String.IsNullOrWhiteSpace(r.Cells(1).Value)) Then 

       command.Parameters("@item").Value = r.Cells(1).Value.Trim 
       command.Parameters("@price").Value = r.Cells(2).Value 
       command.ExecuteNonQuery() 
      End If 
     Next 

    End Using 
End Using 

Использование AddWithValue хороший ярлык, но имеет свои недостатки. Например, неясно, какой тип данных требуется для столбца Price. Используя конструктор параметров, вы можете указать точный тип данных для параметра и избежать возможной ошибки преобразования.

Dim p = new SqlCeParameter("@price", SqlDbType.Decimal) 
command.Parameters.Add(p) 
...... 
+0

работал как шарм. благодаря –

Смежные вопросы