【发布时间】: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 格式