尝试插入MS Access数据库时出错

时间:2015-04-02 14:34:27

标签: c# sql database ms-access oledb

我正在开发一个使用关系数据库的程序。在一个特定的形式中,我试图将新产品信息插入数据库。

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"领域。我已检查过我的数据库中的数据类型是否正确,以及我使用的是''标点符号以包围正在插入数据库的文本字符串。

我想我已经检查了所有内容,为什么我仍然会收到此错误?

非常感谢,如果需要更多信息,请告诉我;)

1 个答案:

答案 0 :(得分:4)

Action是OLE DB提供程序中的reserved keyword。您需要使用方括号(如[Action])。 As a best practice,将其更改为非保留字。

但更多的是

您应始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

同时使用using statement自动处理您的OleDbConnectionOleDbCommand,而不是手动调用.Close()方法。