我有一个数据网格。第一列是包含导入程序的组合框,而第二列是导入的数量。无论用户选择什么,我都希望能够将此数据保存到数据库。
请看下面的代码显示。有人能帮我吗?

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

最佳答案

在循环中添加参数但不执行命令,只有当只有一行时,此操作才起作用;如果必须更新多行,则会导致错误。
继续在每个循环中将相同的参数读入相同的命令。
相反,在循环之前和循环内部移动参数声明,只需设置它们的值,然后执行命令。

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发现参数的数据类型,查看传递的值。这种假设是危险的,可能导致错误。最好使用专门的构造函数,在这里可以定义参数的类型和大小

关于sql-server - 将Datagrid数据保存到VB.Net中的SQL Server数据库中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26192477/

10-09 00:54
查看更多