为啥我收到“UPDATE 语句中的语法错误”。例外?

Posted

技术标签:

【中文标题】为啥我收到“UPDATE 语句中的语法错误”。例外?【英文标题】:Why am I getting a "Syntax error in UPDATE statement." exception?为什么我收到“UPDATE 语句中的语法错误”。例外? 【发布时间】:2015-04-30 12:51:19 【问题描述】:
 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 语句中的语法错误。”。

【问题讨论】:

【参考方案1】:

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

作为最佳实践,将其更改为非保留字。

即使我们看不到,也可以使用using statement 处理您的OleDbCommandOleDbConnection

【讨论】:

谢谢,也感谢using声明中的建议【参考方案2】:

我同意声纳。密码是 OLE DB Provider 中的保留关键字。

如果您使用多个表,为了避免与保留关键字混淆 -- 你必须使用。 select table.[Password] from table;

UPDATE 表 SET 表。[Password]=?

【讨论】:

以上是关于为啥我收到“UPDATE 语句中的语法错误”。例外?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在尝试更新数据库时出现语法错误?

针对Access数据库的Update语句中的语法错误(使用OleDbCommandBuilder)

在 Access 数据库中更新密码时 UPDATE 语句中的语法错误

为啥我会收到 OleDbException:“没有为一个或多个必需参数提供值。”例外?

MS Access:使用多个连接更新语句 [重复]

收到通知时例外