我正在使用C#OleDb创建订单表单,并且尝试将订单表单中的组合框的大小值放入数据库时出现问题。 
导致问题的代码如下:


 private void btn_Save_Click(object sender,EventArgs e)
 {
尝试
 {
 connection.Open();
 OleDbCommand command = new OleDbCommand();
 command.Connection = connection;
 command.CommandText =“插入OrderForm(Size)值('”+ sizeBox.Text +“')”;
 command.ExecuteNonQuery();
 MessageBox.Show(“订单插入数据库”);
的Connection.close();
 }
 catch(Exception ex)
 {
 MessageBox.Show(“Error”+ ex);
 }
 }



 这是导致我出现问题的唯一一段代码,我将它与我的其他commandText代码行进行了比较我已经注释掉了,以确保语法正确,看起来对我来说没问题。我还检查过以确保commandText代码中列出的字段名称和实际数据库中的字段是正确的。任何有关此问题的帮助将不胜感激。干杯


编辑:语法代码给我的错误


答案 0 :(得分:3)
SIZE是一个保留字。除非将其括在方括号中,否则不能将其用作字段名称,因此您的代码应写为
private void btn_Save_Click(object sender, EventArgs e)
{
try
{
string sqlText = "insert into OrderForm([Size]) values (?)";
using(OleDbConnection connection = new OleDbConnection(.....))
using(OleDbCommand command = new OleDbCommand(sqlText, connection))
{
connection.Open();
command.Parameters.Add("@p1", OleDbType.VarWChar).Value = sizeBox.Text;
int rowsAdded = command.ExecuteNonQuery();
if(rowsAdded > 0)
MessageBox.Show("Order Inserted into Database");
else
MessageBox.Show("No Order added to the Database");
}
}
catch (Exception ex)
{
MessageBox.Show("Error " + ex.Message);
}
}
将SIZE括在方括号中的部分我改变了一些事情。
首先每次到达数据库时,都会在连接和其他一次性对象周围使用using语句。这样可以避免在不需要内存泄漏和昂贵的资源利用时使用。
第二次查询被参数化,这样就可以更清楚地了解你在做什么,避免sql注入以及正确解析值的问题。