2014-01-09 67 views
1

这是我的代码,我在我的INSERT statement用于获取语法错误:C#语法错误 - INSERT INTO语句。访问数据库。

string strSql = "INSERT INTO Responses (OCR, DeadlineDate, OCR Title) VALUES ('"+textBox5.Text+"','"+textBox7.Text+"', '"+textBox6.Text+"')"; 

OleDbConnection newConn = new OleDbConnection(strProvider); 
OleDbCommand dbCmd = new OleDbCommand(strSql, newConn); 

newConn.Open(); 
dbCmd.ExecuteNonQuery(); 

什么想法?

+2

避免目前的注入漏洞; http://stackoverflow.com/questions/5893837/using-parameters-inserting-data-into-access-database –

回答

9

列名OCR Title是无效的,你要逃避它使用[][OCR Title]

INSERT INTO Responses (OCR, DeadlineDate, [OCR Title]) VALUES(... 

另外,请尽量使用而不将值参数化查询:

string strSql = "INSERT INTO Responses (OCR, DeadlineDate, [OCR Title]) VALUES (?, ?, ?)"; 

using (OleDbConnection newConn = new OleDbConnection(strProvider)) 
{ 
    using (OleDbCommand dbCmd = new OleDbCommand(strSql, newConn)) 
    { 
    dbCmd.CommandType = CommandType.Text; 
    dbCmd.Parameters.AddWithValue("OCR", textBox5.Text); 
    dbCmd.Parameters.AddWithValue("DeadlineDate", textBox7.Text); 
    dbCmd.Parameters.AddWithValue("[OCR Title]", textBox6.Text); 
    newConn .Open(); 
    dbCmd.ExecuteNonQuery(); 
    } 
} 
+0

当升级到一个新的数据库版本时,总是在列名称周围放置括号。 OCR成为关键字。 – Silvermind

0

我猜语法错误与c#无关,但与SQL语句无关。

也许你需要对“OCR标题”表名称的textBoxes值和文本限定符进行转义。