2016-03-02 38 views
0

我已经编辑了这个问题以防止问另一个问题。我正在尝试使用UPDATE查询和参数更新MS Access中的数据表。该代码不会给出错误并且运行正常,但它不会保存更新的数据,我无法解决原因。使用UPDATE查询更新OLEDB数据库

下面是我使用的代码:

if (Editing) 
     {     
      string Query = "UPDATE [Employee] SET [email protected], [email protected], [email protected], [email protected], [email protected] 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"); 
      } 

我怎样才能改变这种代码,以便它的工作原理?提前致谢。

EDIT/ANSWER。 我不知道,如果你遇到问题,你也许不知道UPDATE查询。添加参数时,您需要按照与查询中调用的顺序相同的顺序添加它们。在我的代码中,第一个参数应该最后添加,因为它是stringQuery中的最后一个。我移动它,它工作正常!

+3

删除单引号,参数化将为您做到这一点。 '@?'看起来很奇怪。 –

+0

是payrollNo数据库中的varchar?是否可以将一个int32放入参数中,但将其设置为addwithvalue中的varchar? –

+1

FYI你'AddWithValue(姓名,DBTYPE)'应该是'AddWithValue(名称,值)'虽然它看起来像它仍然会工作,你再覆盖 –

回答