将记录添加到 Access 数据库时出现“INSERT INTO 语句中的语法错误”
Posted
技术标签:
【中文标题】将记录添加到 Access 数据库时出现“INSERT INTO 语句中的语法错误”【英文标题】:"Syntax error in INSERT INTO statement" when adding record to Access database 【发布时间】:2015-05-03 21:51:30 【问题描述】:我已经搜索了几个小时来解决这个问题,但我所阅读的内容没有任何帮助。尝试将此记录添加到 Access 数据库时出现此错误。我要保存的文件名为 Cats.accdb,其中有一个名为 Cats 的表。
表格列名: CatId(类型:文本) CatName(文本) 头发(文本) 尺寸(文本) CareType(文本) 备注(文本) AdoptDate(日期/时间通用日期)、Weight(双精度)、Age(整数)(我在 C# 代码中注释了对这些列的任何引用,以尝试仅使用普通的旧文本框进行调试。起初我以为是因为与使用 DateTimePicker 有关,但在注释掉后仍然会抛出错误。)
C# 代码:
Cat temp = new Cat(txtCatName.Text, txtHair.Text, txtSize.Text, txtCareType.Text, txtNotes.Text);
public string AddCat()
string strFeedback = "";
string strSQL = "INSERT INTO Cats (CatName, Hair, Size, CareType, Notes) VALUES (@CatName, @Hair, @Size, @CareType, @Notes)";
OleDbConnection conn = new OleDbConnection();
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=Data\Cats.accdb; Persist Security Info=False;";
conn.ConnectionString = strConn;
OleDbCommand comm = new OleDbCommand();
comm.CommandText = strSQL;
comm.Connection = conn;
comm.Parameters.AddWithValue("@CatName", CatName);
comm.Parameters.AddWithValue("@Hair", Hair);
comm.Parameters.AddWithValue("@Size", Size);
comm.Parameters.AddWithValue("@CareType", CareType);
comm.Parameters.AddWithValue("@Notes", Notes);
//comm.Parameters.AddWithValue("@AdoptDate", AdoptDate);
//comm.Parameters.AddWithValue("@Weight", Weight);
//comm.Parameters.AddWithValue("@Age", Age);
conn.Open();
strFeedback = comm.ExecuteNonQuery().ToString() + " record has been added successfully!";
conn.Close();
catch (Exception err)
strFeedback = "ERROR: " + err.Message;
return strFeedback;
lblFeedback.Text = temp.AddCat();
感谢您提供的任何帮助!
【问题讨论】:
抱歉,我已经删除了那个标签。 谢谢(特别是@guffa)...我遇到了同样的问题,你们刚刚解决了...我桌上的一个字段是保留字(我没有不知道是哪一个,所以我所做的只是在每个字段名称中放一个括号 - 一个是“插入语句”)。像这样: string insertOnDB = "插入 [Users] ([Username],[Password],[CreatedOn],[FullName],[Gender],[AccountType],[Status])values(?,?,?,? ,?,?,?)";再次感谢您 【参考方案1】:Size
是 reserved keyword。在名称周围添加括号以指定它是一个标识符:
string strSQL = "INSERT INTO Cats (CatName, Hair, [Size], CareType, Notes) VALUES (@CatName, @Hair, @Size, @CareType, @Notes)";
或者,将字段名称更改为不是关键字的名称。
【讨论】:
非常感谢!我在将其更改为 CatName 之前使用了 Name,因为它被标记为保留字,所以我什至没有想到那个(显然)。你的建议解决了我的问题!【参考方案2】:在 MS Access OLEDB 中,我相信您使用位置标记而不是参数名称。
string strSQL = "INSERT INTO Cats (CatName, Hair, Size, CareType, Notes) VALUES (?, ?, ?, ?, ?)";
【讨论】:
No Access 接受其大表亲使用的相同参数语法。 (或者更好的是,OleDB 提供者不在乎)但这并不意味着 OleDb 可以识别这些名称并允许您更改提供值的顺序 对不起,你是对的。我查看了没有“jet”一词的连接字符串,却没有意识到它已被取代。以上是关于将记录添加到 Access 数据库时出现“INSERT INTO 语句中的语法错误”的主要内容,如果未能解决你的问题,请参考以下文章
在Access 2010中运行追加查询时出现“表已存在”错误
在 MS Access VBA 中添加两个等于零的变量时出现奇怪的结果
在 Access 中附加 tabledef 时出现错误 3045 或 3356