为什么我在UPDATE语句中收到“语法错误”。例外?

时间:2015-04-30 12:51:19

标签: c# sql ms-access-2007 oledb

 public void EditUser(string id, string userid, string email, string password)
    {
        try
        {
            _dbConn.Open();

            OleDbCommand updateCmd = new OleDbCommand("UPDATE LOGINS SET Username=?, Password=?, Email=? WHERE ID=?", _dbConn);


            OleDbParameter param1 = new OleDbParameter("Username", userid);
            OleDbParameter param2 = new OleDbParameter("Password", password);
            OleDbParameter param3 = new OleDbParameter("Email", email);
            OleDbParameter param4 = new OleDbParameter("ID", id);

            param1.DbType = DbType.AnsiString;
            param1.Direction = ParameterDirection.Input;
            param2.DbType = DbType.AnsiString;
            param2.Direction = ParameterDirection.Input;
            param3.DbType = DbType.AnsiString;
            param3.Direction = ParameterDirection.Input;
            param4.DbType = DbType.AnsiString;
            param4.Direction = ParameterDirection.Input;

            updateCmd.Parameters.Add(param1);
            updateCmd.Parameters.Add(param2);
            updateCmd.Parameters.Add(param3);
            updateCmd.Parameters.Add(param4);


            int rowsAffected = updateCmd.ExecuteNonQuery();

        }
        catch (Exception excep)
        {

            System.Diagnostics.Trace.WriteLine(excep.Message);
        }
        finally
        {
            if (_dbConn.State == ConnectionState.Open)
                _dbConn.Close();

        }
        return;
    }

我正在使用C#和Access 2007,当我更新单个列时,这非常正常。但是,当我尝试同时更新多个列时,我开始得到这个异常

  

“UPDATE语句中的语法错误。”。

2 个答案:

答案 0 :(得分:6)

Password是OLE DB提供程序中的reserved keyword。您需要使用方括号,如[Password]

作为最佳做法,请将其更改为非保留字。

使用using statement处理您的OleDbCommandOleDbConnection,即使我们无法看到它。

答案 1 :(得分:0)

我同意声纳。密码是OLE DB提供程序中的保留关键字。

如果您使用多个表格,请避免混淆保留关键字 - 你必须使用。 选择表。[密码]来自表格;

UPDATE表SET表。[密码] =?