1

我编写了这段代码来将数据插入到我的 Microsoft Access 数据库中,但它失败并引发了这个错误:

INSERT INTO 语句中的语法错误。

这是我的代码:

  // Open the connection to the database.
  connection.Open();
  OleDbCommand dbcmd = new OleDbCommand();
  dbcmd.Connection = connection;

  // Inserting Data.
  dbcmd.CommandText = "insert into ConveyanceBill1 (empname, from) values('" + txtEmployee.Text + "','" + txtFrom.Text + "')";
  dbcmd.ExecuteNonQuery();
  MessageBox.Show("Sucessfully Added!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
  connection.Close();

但如果我改变这一行:

// Inserting Data.
dbcmd.CommandText = "insert into ConveyanceBill1 (empname, from) values('" + txtEmployee.Text + "','" + txtFrom.Text + "')";

到这条线:

// Inserting Data.              
dbcmd.CommandText = "insert into ConveyanceBill1 (empname, designation) values('" + txtEmployee.Text + "','" + txtDesignation.Text + "')";

它完美无缺。我找不到它为什么不工作的原因。这是我在设计视图中的数据库表:

数据库表的设计视图

我尝试了很多,但我仍然不明白为什么它不起作用。

4

2 回答 2

6

FROM是 Microsoft OLE DB Provider 中的保留关键字。您可能想将它与方括号一起使用,例如[FROM]. 但作为最佳实践,将其更改为非保留字。

但更重要的是

您应该始终使用参数化查询。这种字符串连接对SQL 注入攻击是开放的。

还使用using语句来自动处理您的OleDbConnection和,OleDbCommand而不是手动调用CloseDispose方法。

using(var connection = new OleDbConnection(conString))
using(var dbcmd = connection.CreateCommand())
{
    dbcmd.CommandText = "insert into ConveyanceBill1 (empname, from) values(?, ?)";
    dbcmd.Parameters.Add("?", OleDbType.VarWChar).Value = txtEmployee.Text;
    dbcmd.Parameters.Add("?", OleDbType.VarWChar).Value = txtFrom.Text;
   
    connection.Open();
    int effectedRows = dbcmd.ExecuteNonQuery();
    if(effectedRows > 0)
    {
       MessageBox.Show("Sucessfully Added!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }   
}
于 2016-03-12T09:53:24.203 回答
1

“from”是 Microsoft 访问的保留字,将其更改为非保留字,例如“desfrom”,它应该可以正常工作。

于 2016-03-12T11:15:24.190 回答