-1

我正在尝试使用 MS Access 数据库更新记录,但所有记录都使用相同的值进行更新..我尝试使用带有位修改的 sql server 进行相同的编码,并且此编码与 sql server 完美配合... MS Access 有什么问题?这是我的代码:

 Try

 con = New OleDbConnection(cs)
 con.Open()

 Dim cb As String = "update ExtraServices set [Item]=?, [Quantity]=?,[UnitPrice]=?, [TotalPrice]=? where [HostelerID]=? and [Servicedate]=?"
 Dim cmd As New OleDb.OleDbCommand(cb, con)
 cmd.Parameters.Add(New OleDbParameter("@item", OleDbType.VarChar, 150, "Item"))
 cmd.Parameters.Add(New OleDbParameter("@quantity", OleDbType.Integer, 6, "Quantity"))
 cmd.Parameters.Add(New OleDbParameter("@unitprice", OleDbType.Integer, 6, "UnitPrice"))
 cmd.Parameters.Add(New OleDbParameter("@total", OleDbType.Integer, 6, "TotalPrice"))
 cmd.Parameters.Add(New OleDbParameter("@hostelerID", OleDbType.VarChar, 20, "HostelerID"))
 cmd.Parameters.Add(New OleDbParameter("@ServiceDate", OleDbType.Date, 30, "ServiceDate"))
 ' Prepare command for repeated execution
 cmd.Prepare()
 ' Data to be inserted
 For Each row As DataGridViewRow In DataGridView1.Rows
     If Not row.IsNewRow Then
         cmd.Parameters("@item").Value = row.Cells(0).Value
         cmd.Parameters("@quantity").Value = row.Cells(1).Value
         cmd.Parameters("@unitprice").Value = row.Cells(2).Value
         cmd.Parameters("@total").Value = row.Cells(3).Value
         cmd.Parameters("@HostelerID").Value = cmbHostelerID.Text
         cmd.Parameters("@ServiceDate").Value = dtpServiceDate.Text
         cmd.ExecuteNonQuery()
     End If
 Next
 con.Close()
 MessageBox.Show("Successfully updated", "Entry", MessageBoxButtons.OK, MessageBoxIcon.Information)
 btnUpdate_record.Enabled = False
 Catch ex As Exception
      MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
 End Try
4

2 回答 2

2

用于 WHERE 子句的参数始终相同。所以你查询更新总是相同的记录(你结束你的循环用网格最后一行的值更新同一组记录)

     cmd.Parameters("@HostelerID").Value = cmbHostelerID.Text   ' <- same for every row
     cmd.Parameters("@ServiceDate").Value = dtpServiceDate.Text
于 2013-10-01T22:57:58.167 回答
1

另一个@Steve是对的。在每个循环中,您告诉数据库更新所有记录

WHERE HostelerID = cmbHostelerID.Text AND ServiceDate = dtpServiceDate.Text

这不会从一个迭代更改为下一个迭代,因此当您完成循环时,无论 Item、Quantity、UnitPrice 和 TotalPrice 的最后一个值是什么,都将应用于与该条件匹配的所有记录。

您的ExtraServices表是否有主键?是这样的,那应该用于你的更新SQL。

如果这适用于 MSSQL(有位修改),修改是什么?

如果这没有帮助(不是解决方案),请提供更多信息。样本数据有帮助。您期望发生的事情的示例。你想在这里做什么。我们无法从代码中判断,但我们可以判断它是错误的。帮助我们帮助您。

于 2013-10-02T14:37:56.737 回答