我的软件生成一个要插入我的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')
工作正常!但不是在软件上。
答案 0 :(得分:0)
首先,我选择使用OleDbParameters而不是string.Format来构建您的查询。这样你就不必担心包含引号的字符串或其他任何可能使你的SQL无效的字符串。请查看OleDbCommand的Prepare method,以获取有关使用INSERT查询的参数的示例,就像您尝试实现的那样。
在您的示例中,我不确定您的insert_txt
变量引用了什么,但鉴于您似乎覆盖了该值,我将其从构造函数中排除,并仅构建您的一旦您正确设置了cmder
变量,就会insert
变量。尝试以下内容;
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();