使用 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 命令引发数据类型不匹配

C#如何通过OleDb更新Excel中的数据

System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误。 '

数据更新接口与延迟更新

oledb 处理excel 报错 UPDATE “Operation must use an updateable query”

使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值