Если вы не хотите делать то, что @jmcilhinney предлагает в комментариях (лучший способ), это должно работать как можно ближе к предоставленному вами коду, но не разделяет код пользовательского интерфейса кода базы данных.
Идея состоит в том, чтобы добавить параметр один раз за пределы l oop, а затем просто изменить значение в l oop. Я должен был угадать тип данных и размер параметра. Пожалуйста, проверьте свою базу данных и исправьте код.
Private Sub OPCode2()
Using cn As New SqlConnection("Your connection string"),
cmd As New SqlCommand("insert into sale1 (Description)values(@1)", cn)
cmd.Parameters.Add("@1", SqlDbType.NVarChar, 300)
cn.Open()
For Each row As DataGridViewRow In DataGridView1.Rows
If row.Cells(0).Value IsNot Nothing Then
cmd.Parameters("@1").Value = row.Cells(2).Value
cmd.ExecuteNonQuery()
End If
Next
End Using
End Sub
Чтобы отделить код ...
Private Sub UICode()
Dim lst As New List(Of String)
For Each row As DataGridViewRow In DataGridView1.Rows
If row.Cells(0).Value IsNot Nothing Then
lst.Add(row.Cells(2).Value.ToString)
End If
Next
UpdateDatabase(lst)
End Sub
Private Sub UpdateDatabase(lst As List(Of String))
Using cn As New SqlConnection("Your connection string"),
cmd As New SqlCommand("insert into sale1 (Description)values(@1)", cn)
cmd.Parameters.Add("@1", SqlDbType.NVarChar, 300)
cn.Open()
For Each s As String In lst
cmd.Parameters("@1").Value = s
cmd.ExecuteNonQuery()
Next
End Using
End Sub