使用 UPDATE 查询更新 OLEDB 数据库
Posted
技术标签:
【中文标题】使用 UPDATE 查询更新 OLEDB 数据库【英文标题】:Updating OLEDB Database using UPDATE Query 【发布时间】:2016-03-02 16:07:17 【问题描述】:我已编辑此问题以防止再问其他问题。我正在尝试使用 UPDATE 查询和参数更新 MS Access 中的数据表。代码没有报错,运行正常,但没有保存更新的数据,我不知道为什么。
这是我正在使用的代码:
if (Editing)
string Query = "UPDATE [Employee] SET PayrollNo=@PayrollNo, FirstName=@FirstName, LastName=@LastName, AnnualHolidayEntitlement=@AnnualHolidayEntitlement, DaysTakenToDate=@DaysTakenToDate WHERE PayrollNo = @SentPayroll";
string ConnString = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\HoliPlanData.accdb;Persist Security Info=False";
using (OleDbConnection conn = new OleDbConnection(ConnString))
using (OleDbCommand UpdateEmployee = new OleDbCommand(Query, conn))
conn.Open();
UpdateEmployee.Parameters.AddWithValue("@SentPayroll", OleDbType.Integer).Value = Convert.ToInt32(PassPayrollNo);
UpdateEmployee.Parameters.AddWithValue("@PayrollNo", OleDbType.Integer).Value = Convert.ToInt32(TxtPayrollNo.Text);
UpdateEmployee.Parameters.AddWithValue("@FirstName", OleDbType.VarChar).Value = TxtFirstName.Text;
UpdateEmployee.Parameters.AddWithValue("@LastName", OleDbType.VarChar).Value = TxtLastName.Text;
UpdateEmployee.Parameters.AddWithValue("@AnnualHolidayEntitlement", OleDbType.Integer).Value = Convert.ToInt32(TxtAHE.Text);
UpdateEmployee.Parameters.AddWithValue("@DaysTakenToDate", OleDbType.Integer).Value = Convert.ToInt32(TxtDTTD.Text);
UpdateEmployee.ExecuteScalar();
BtnSubmit.Enabled = false;
MessageBox.Show("Data Edited Successfully");
如何更改此代码以使其正常工作?提前致谢。
编辑/回答。 我不知道,如果您遇到 UPDATE 查询问题,您可能也不知道。添加参数时,您需要按照在查询中调用它们的顺序添加它们。在我的代码中,第一个参数应该最后添加,因为它在 stringQuery 中是最后一个。我移动了它,它工作得很好!
【问题讨论】:
删除单引号,参数化会为你做到这一点。@?
看起来很奇怪。
数据库中的 payrollNo 是 varchar 吗?可能是您将 int32 放入参数中,但您将其设置为 addwithvalue 中的 varchar?
仅供参考,您有AddWithValue(name, DBTYPE)
,它应该是AddWithValue(name, value)
,尽管看起来它仍然可以在您覆盖时工作
请用您的更改编辑代码并使用@something
而不是@?
和"?"
我可以看到?
可能会导致问题,因为它是一个未命名的 OLEDB 参数标记与命名参数混合,请将其更改为与所有其他参数相同的 @name 格式
【参考方案1】:
Why does invoking my UPDATE query in an Access database via OleDb not work?
如果其他人对 UPDATE 查询有这个问题,我花了太长时间才找到这个问题,有人把它清理得很好。
【讨论】:
以上是关于使用 UPDATE 查询更新 OLEDB 数据库的主要内容,如果未能解决你的问题,请参考以下文章
清除 DataTable 中的 Byte[] 值时,OleDb Update 命令引发数据类型不匹配
System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误。 '
oledb 处理excel 报错 UPDATE “Operation must use an updateable query”