我正在开发一个使用关系数据库的程序。在一个特定的形式中,我试图将新产品信息插入数据库。
using System.Data.OleDb;
当我尝试保存新产品时,此代码会运行...
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "insert into Products (ProductName,ProductSKU,RP,WP,Stock,FPS,Ammo,MagazineCap,HopUp,Range,Brand,Colour,Action,Features) values('" + txt_ProductName.Text + "','" + txt_SKU.Text + "'," + txt_RP.Text + "," + txt_WP.Text + "," + numericUpDown_Inventory.Value + "," + cobo_FPS.Text + ",'" + cobo_Ammo.Text + "'," + cobo_MagazineCap.Text + ",'" + cobo_HopUp.Text + "'," + cobo_Range.Text + ",'" + cobo_Brand.Text + "','" + cobo_Colour.Text + "','" + cobo_Action.Text + "','" + txt_Features.Text + "')";
//Action field currently causes an error
MessageBox.Show(query);
command.CommandText = query;
command.ExecuteNonQuery();
connection.Close();
...并抛出错误
"错误System.Data.OleDb.OleDbException(0x80040E14):语法错误 INSERT INTO语句。"
(然后是一堆我认为不重要的东西)
为巨大的SQL查询道歉。我使用完全相同的方法在我的程序中的其他几个地方使用插入SQL查询,他们都完全正常工作。但是,此示例导致此错误。通过"评论"的繁琐过程我的SQL查询的各个部分我发现错误在于" Action"领域。我已检查过我的数据库中的数据类型是否正确,以及我使用的是''标点符号以包围正在插入数据库的文本字符串。
我想我已经检查了所有内容,为什么我仍然会收到此错误?
非常感谢,如果需要更多信息,请告诉我;)
答案 0 :(得分:4)
Action
是OLE DB提供程序中的reserved keyword。您需要使用方括号(如[Action]
)。 As a best practice,将其更改为非保留字。
您应始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
同时使用using
statement自动处理您的OleDbConnection
和OleDbCommand
,而不是手动调用.Close()
方法。