保存Datagrid数据到VB.Net中的SQL Server数据库
问题描述:
我有一个数据的数据网格。第一列是与进口商的组合框,第二列是进口数量。我希望能够将这些数据保存到数据库,而不管用户的选择。保存Datagrid数据到VB.Net中的SQL Server数据库
请看我的代码如下。有人可以帮我吗?
Dim intReturnValue As Integer = 0
Dim SqlCmd As String = "Update Importer_Balance SET Quantity = Quantity + @Quantity WHERE [email protected] and [email protected]"
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 [email protected] and [email protected]"
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
发现查看传递值的参数的数据类型。这种假设是危险的,可能会导致错误。最好使用专门的构造函数,您可以在其中定义参数的类型和大小
Steve。感谢您的回应。审查我的代码并按照你的建议后,我得到这个错误:无法投入'System.Int32'类型的对象键入'System.Data.SqlClient.SqlParameter'。 – 2014-10-04 14:11:57
我的不好,缺少最后一个参数中的值 – Steve 2014-10-04 14:12:42
在您的回复之前,我将整个代码放在循环中。我得到的错误与我在遵循该指示后收到的错误类似。错误是:参数化查询'(@Importer nvarchar(4000),@ Quantity nvarchar(4000),@ Product int)'需要参数'@Importer',该参数未提供。 – 2014-10-04 14:19:23