-1
我的軟件生成一個查詢,插入我的Access數據庫,而是來自我的代碼查詢,生成System.Data.OleDb.OleDbException
,與附加信息:.OleDbException語法錯誤INSERT INTO語句中
語法錯誤在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')
它工作正常!不是在軟件上。
工作!事實上,使用不同的變量初始化OleDbCommand是我的錯誤。關於SQL Injection,我知道風險,但是這個軟件將在一個安全的地方在本地工作。 –
非常好。這不僅僅是關於SQL注入。如果在某一點上,你正在讀取一個包含引用字符的有效Commodity_Name(例如,澳大利亞人的Dollar:不好的例子,但你知道這是一個真正的可能性而不是惡意攻擊)呢?這將打破你的字符串格式,然後SQL命令。參與使用參數只是一個好習慣,然後你會基本上做到這一點,因爲你習慣了。 –