INSERT INTO语句语法错误

本文关键字:错误 语法 语句 INTO INSERT | 更新日期: 2023-09-27 18:01:34

我的软件生成一个要插入到我的Access数据库中的查询,但是来自我的代码的查询生成一个System.Data.OleDb.OleDbException,带有一个附加信息:

INSERT INTO语法错误。

调试代码,生成的查询工作良好,如果我尝试通过Access软件insert

我真的不知道为什么我得到这个异常,我的查询是好的!

代码:

OleDbConnection commodityDB = null;
try
{
    commodityDB = new OleDbConnection(connector);
    Console.WriteLine("Microsoft DB Connected!");
}
catch (Exception ex)
{
    Console.WriteLine("Error: Failed to create a database connection. 'n{0}", ex.Message);
    return;
}
OleDbCommand cmder = new OleDbCommand(insert_txt,commodityDB);
string insert = string.Format("INSERT INTO Comm2 (Commodity_Name, Month_Code, Year_Com, ComCode, TradeDate,Open,High,Low,Close,Vol,OI) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')", comName, comMonth, comYear, parts[0], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8]);
commodityDB.Open();
cmder.CommandText = insert;
cmder.ExecuteNonQuery();
myAccessConn.Close();

生成的查询示例:

INSERT INTO Comm2 (Commodity_Name, Month_Code, Year_Com, ComCode, TradeDate, Open, High, Low, Close, Vol, OI) 
VALUES ('Australian Dollar', 'Y', '0', 'A6', '04/28/2014', '92740', '93157', '92435', '92568', '0', '0')

它工作得很好!

INSERT INTO语句语法错误

首先,我会选择使用OleDbParameters而不是string。格式化以构造查询。这样,您就不必担心包含引号的字符串或其他可能使SQL无效的东西。看一下OleDbCommand的Prepare方法,这个例子是如何为INSERT查询使用参数的。

在您的示例中,我不确定您的insert_txt变量指的是什么,但鉴于您似乎正在覆盖该值,我会将其从构造函数中排除,并且只有在您正确设置insert变量后才构建您的cmder变量。试试下面的代码;

string insert = string.Format("INSERT INTO Comm2 (Commodity_Name, Month_Code, Year_Com, ComCode, TradeDate,Open,High,Low,Close,Vol,OI) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')", comName, comMonth, comYear, parts[0], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8]);
OleDbCommand cmder = new OleDbCommand(insert,commodityDB);

commodityDB.Open();
// cmder.CommandText = insert; // You probably won't need this anymore.
cmder.ExecuteNonQuery();
myAccessConn.Close();