将Datagrid数据保存到VB.Net中的SQL Server数据库

时间:2014-10-04 11:45:15

标签: sql-server database vb.net datagridview

我有一个包含数据的数据网格。第一列是带进口商的组合框,第二列是进口数量。我希望能够将这些数据保存到数据库,而不管用户的选择如何。

请参阅下面的代码。有人可以帮助我吗?

Dim intReturnValue As Integer = 0

Dim SqlCmd As String = "Update Importer_Balance SET Quantity = Quantity + @Quantity WHERE Importer=@Importer and Product=@product" 

Dim ConnObj As SqlConnection = New SqlConnection(clsGlobals.ConnString)
Dim CmdObj As SqlCommand = New SqlCommand(SqlCmd, ConnObj)

For i = 0 To Me.dgvImporter.RowCount - 1
        CmdObj.Parameters.AddWithValue("@Importer", Me.dgvImporter.Rows(i).Cells(0).Value)
        CmdObj.Parameters.AddWithValue("@Quantity", Me.dgvImporter.Rows(i).Cells(1).Value)
        CmdObj.Parameters.AddWithValue("@Product", cboProductName.SelectedValue)
Next

ConnObj.Open()

intReturnValue = CInt(CmdObj.ExecuteNonQuery())

ConnObj.Close()

If intReturnValue > 0 Then
        MsgBox("You have successfully updated the product table product.", MsgBoxStyle.Information, "")
        ClearForm()
Else
        MsgBox("No Record were inserted", MsgBoxStyle.Exclamation, "")
End If

1 个答案:

答案 0 :(得分:1)

在循环内部添加参数但不执行命令,仅当您只有一行时才会起作用,如果必须更新多行,则会导致错误。
您继续在每个循环中将相同的参数读取到同一命令。

而是在循环之前和循环内部移动参数声明,只需设置它们的值,然后执行命令。

Dim intReturnValue As Integer = 0
Dim SqlCmd As String = "Update Importer_Balance SET Quantity = Quantity + @Quantity WHERE Importer=@Importer and Product=@product" 

Dim ConnObj As SqlConnection = New SqlConnection(clsGlobals.ConnString)
Dim CmdObj As SqlCommand = New SqlCommand(SqlCmd, ConnObj)
CmdObj.Parameters.Add("@Importer", SqlDbType.Int)
CmdObj.Parameters.Add("@Quantity", SqlDbType.Int)
CmdObj.Parameters.Add("@Product", SqlDbType.Int)
ConnObj.Open()

For i = 0 To Me.dgvImporter.RowCount - 1
    CmdObj.Parameters("@Importer").Value = Convert.ToInt32(Me.dgvImporter.Rows(i).Cells(0).Value)
    CmdObj.Parameters("@Quantity").Value = Convert.ToInt32(Me.dgvImporter.Rows(i).Cells(1).Value)
    CmdObj.Parameters("@Product").Value = Convert.ToInt32(cboProductName.SelectedValue)
    intReturnValue = CInt(CmdObj.ExecuteNonQuery())

Next

重要说明。 AddWithValue发现查看传递值的参数的数据类型。这种假设很危险,可能导致错误。最好使用专门的构造函数,您可以在其中定义参数的类型和大小