MS Access更新表中所有行中具有相同值的记录

时间:2013-10-01 22:48:33

标签: vb.net ms-access-2007

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

 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

2 个答案:

答案 0 :(得分:2)

用于WHERE子句的参数始终相同。因此,您总是查询更新相同的记录(并且您结束循环使用网格中最后一行的值更新同一组记录)

     cmd.Parameters("@HostelerID").Value = cmbHostelerID.Text   ' <- same for every row
     cmd.Parameters("@ServiceDate").Value = dtpServiceDate.Text

答案 1 :(得分:1)

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

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

这不会从一次迭代更改为下一次迭代,因此当您完成循环时,无论Item,Quantity,UnitPrice和TotalPrice的最后值是否都应用于符合该条件的所有记录。

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

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

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