.OleDbException INSERT INTO语句中的语法错误

时间:2014-05-05 03:22:25

标签: c# sql .net

我的软件生成一个要插入我的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')

工作正常!但不是在软件上。

1 个答案:

答案 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();