Как использовать forl oop внутри списка sqlparameter? - PullRequest
0 голосов
/ 04 апреля 2020

Как добавить мое значение gridview данных в базу данных, используя dal мой код это

Dim list As New List(Of SqlParameter)

For each row as DataGridView In DataGridView1.Rows
    If row.cell(0).value isnot nothing
        Qry="insert into sale1(Description)values(@1)"
        With list
           .add(new Sqlparameter("@1",row.cells(2).value)
        End with
    End if
Next

1 Ответ

0 голосов
/ 04 апреля 2020

Если вы не хотите делать то, что @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
...