由于“SQL 语法”错误,无法插入 MS Access [关闭]
Posted
技术标签:
【中文标题】由于“SQL 语法”错误,无法插入 MS Access [关闭]【英文标题】:Unable to insert into MS Access due to an "SQL Syntax" error [closed] 【发布时间】:2014-12-23 20:05:05 【问题描述】:我正在尝试插入 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);
编辑:
上面的代码有一个错字,我现在已经修正了。它没有出现在原始代码中,而是在我在这里编辑后出现的。正如许多人指出的那样,解决方法是括号。
【问题讨论】:
YouAreSalty
你有没有检查过你的插入语句如果你要添加一个参数,它的名字必须匹配这是没有道理的
@DJKRAZE 在 OleDb 中他们没有。只有参数的顺序很重要。
LarsTech
好点.. 我已经习惯使用 OracleParams 和 SqlParams,我真的认为这无关紧要.. 好收获
@Grant Winney 下次会做。我知道问题出在哪里,但我想有时我“知道”的可能是错的......
如果操作员修复了他的代码示例,我认为这是一个有效的问题。访问不像其他 sql 环境那样宽松,并且知道与关键字相同的列名周围的括号可能对其他人有所帮助。
【参考方案1】:
将字段名称括在方括号中。
@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);
从 cmets 看来,我们似乎对 password 是否是 MS Access 中的保留字存在分歧。根据微软的说法,它是一个保留字:List of reserved words in Jet 4.0
【讨论】:
顺序真的重要吗?我认为 ADO.NET 会足够聪明地重新排列参数。 是的,由于OleDb(带有MS Access)忽略了参数names,它只能使用它们的位置来将参数值与SQL中的参数“place-holders”进行匹配声明。【参考方案2】:您可以将数据库字段放在引号或方括号中:
[password]
"password"
例如:
"INSERT INTO profiles(user_name, full_name, [password], profile_id)
【讨论】:
这不是这里的问题。 @KenWhite,鉴于 OP 显示的代码,错误是SQL Syntax
错误,这是唯一可能出现的地方。其他任何事情都需要更多代码才能准确重现问题。
@ps2goat Grant 在他的评论中指出了实际问题
OP's
案例中存在 2 个问题。也许 OP 自己没有抽查自己的查询字符串。@password and @passwords
OP 帖子中的问题是password
和@passwords
之间的拼写错误。我没有说你的答案是错误的(这就是我没有投反对票的原因);我只是注意到这不是这里的问题,因为添加这些括号不会解决问题。以上是关于由于“SQL 语法”错误,无法插入 MS Access [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
将日期插入数据库时出现 SQL 语法错误(框架:codeigniter)
无法使用 c#“第 1 行的 SQL 语法错误”将数据从 Ms Access 迁移到 MySQL 工作台
错误:ER_PARSE_ERROR:您的 SQL 语法有错误;