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