由于“SQL 语法”错误,无法插入到 MS Access 中

本文关键字:插入 MS Access SQL 语法 错误 由于 | 更新日期: 2023-09-27 18:35:12

我正在尝试插入MS Access,但是在"SQL语法"中出现错误。

我相信"密码"这个词是一个关键词。有没有办法在不更改数据库字段名称的情况下解决此问题?

OleDbCommand cmd = new OleDbCommand("INSERT INTO profiles(
     user_name, full_name, password, profile_id) 
     VALUES (@user_name, @full_name, @password, @profile_id);");
cmd.Parameters.AddWithValue("@full_name", this.FullName);
cmd.Parameters.AddWithValue("@user_name", this.UserName);
cmd.Parameters.AddWithValue("@password", this.Password);
cmd.Parameters.AddWithValue("@profile_id", this.ProfileID);

编辑:

上面的代码中有一个错别字,我现在已经修复了。它没有出现在原始代码中,而是在我在此处编辑它后出现。正如许多人指出的那样,修复是括号。

由于“SQL 语法”错误,无法插入到 MS Access 中

将字段名称括在方括号中。

@passwords@password 之间的不匹配无关紧要,因为在将 OleDb 与 Access 一起使用时,将忽略参数名称。 但是,您必须按照参数值在 INSERT 语句中显示的顺序提供参数值,---@user_name@full_name

    OleDbCommand cmd = new OleDbCommand("INSERT INTO profiles(user_name, full_name, [password], profile_id) VALUES (@user_name, @full_name, @passwords, @profile_id);");
    cmd.Parameters.AddWithValue("@user_name", this.UserName);
    cmd.Parameters.AddWithValue("@full_name", this.FullName);
    cmd.Parameters.AddWithValue("@password", this.Password);
    cmd.Parameters.AddWithValue("@profile_id", this.ProfileID);

从评论来看,我们似乎对密码是否是MS Access中的保留字存在分歧。 根据Microsoft的说法,它是一个保留字:Jet 4.0中的保留字列表

您可以将数据库字段放在引号或方括号中:

[password] "password"

例如:

"INSERT INTO profiles(user_name, full_name, [password], profile_id)