2013-10-01 118 views
-1

我试图更新使用MS Access数据库记录,但所有记录都用得到相同values..i更新的更新与相同值的记录中的所有行试图相同的编码与位修改SQL Server和这种编码工作与SQL服务器完美... MS Access的问题是什么? 这是我的代码:的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 

回答

1

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

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

这不会从一个迭代改变为下一个你完成循环,所以当,无论最后的计算结果是项目,数量,单价和TotalPrice是应用于符合该条件的所有记录。

ExtraServices表有一个主键?是的,应该用于更新SQL。

如果这与MSSQL(有位修改)的作品,什么是修改?

如果这没有帮助(不是解决方案),那么提供一些更多的信息。示例数据有帮助。你期望发生的例子。你想在这里做什么。我们无法从代码中得知,但我们可以说它是错误的。帮助我们帮助你。

2

用于WHERE子句的参数始终相同。所以您查询的更新总是相同的记录(和你结束循环更新与从最后一排从电网中的值相同的记录集)

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

但我更新其他领域......这个查询完美地与sql服务器修改位修改..什么是MS访问错误? –

+0

我该如何解决这个问题?我正在更新记录使用datagridview –

+0

如何更新datagridview中更新值的其他字段的datagridview值.... –