如何从DataGridview的所有行中更新Sql数据库?

时间:2019-02-09 16:51:41

标签: vb.net

我正在制作一个具有一个DataGridView的表单,并且正在从SQL数据库中加载值。我试图更新插入到DataGridView中的SQL中所有指定行的单元格数据。我编写了以下代码,但它仅将一行数据更新到SQL数据库。我该怎么办?

Using cmd7 As New SqlCommand("update stockdata set available = @available , 
qty = @qty where itemcode = @itemcode", cn)


For Each row As DataGridViewRow In DataGridView1.Rows
cmd7.Parameters.Add("@itemcode", SqlDbType.VarChar).Value = row.Cells(0).Value

cmd7.Parameters.Add("@available", SqlDbType.VarChar).Value = "no"
cmd7.Parameters.Add("@qty", SqlDbType.VarChar).Value = "0"
cn.Open()
cmd7.ExecuteNonQuery()
cn.Close()
Next

End Using

2 个答案:

答案 0 :(得分:0)

很高兴看到使用块,参数和标识数据类型的.Add方法。您一直在重复添加相同的参数,直到较差的旧cmd7有太多参数,不知道该怎么做。 :-)唯一需要更改的是@itemcode的.Value。因此,我们唯一需要做的就是引用已经在循环外添加的参数集合的成员,并设置其值。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Using cn As New SqlConnection("Your connection String")
        Using cmd7 As New SqlCommand("update stockdata set available = @available , qty = @qty where itemcode = @itemcode", cn)
            cmd7.Parameters.Add("@available", SqlDbType.VarChar).Value = "no"
            cmd7.Parameters.Add("@qty", SqlDbType.VarChar).Value = "0"
            cmd7.Parameters.Add("@itemcode", SqlDbType.VarChar)
            cn.Open()
            For Each row As DataGridViewRow In DataGridView1.Rows
                cmd7.Parameters("@itemcode").Value = row.Cells(0).Value
                cmd7.ExecuteNonQuery()
            Next
        End Using
    End Using
End Sub

答案 1 :(得分:-1)

尝试使用此方法:尽管未测试。(只需循环遍历datagridview中的所有行)

For Each row As DataGridViewRow In DataGridView1.Rows
        Using cmd7 As New SqlCommand("update stockdata set available = @available , qty = @qty where itemcode = @itemcode", cn)

            cmd7.Parameters.Add("@itemcode", SqlDbType.VarChar).Value = row.Cells(0).Value

            cmd7.Parameters.Add("@available", SqlDbType.VarChar).Value = "no"

            cmd7.Parameters.Add("@qty", SqlDbType.VarChar).Value = "0"

            cn.Open()

            cmd7.ExecuteNonQuery()

            cn.Close()
        End Using
    Next