我正在尝试使用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
答案 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(带位修改),那么修改是什么?
如果这没有帮助(不是解决方案),那么请提供更多信息。样本数据有帮助。您希望发生什么的示例。你想在这做什么我们无法从代码中分辨出来但我们可以说它是错误的。帮助我们帮助您。