未能将数据插入 MS Access 数据库(INSERT INTO 语句中的语法错误。)

Failing to insert data into MS Access database (syntax error in INSERT INTO statement.)

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

Syntax error in INSERT INTO statement.

这是我的代码:

  // 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 + "')";

它运行完美。我找不到为什么它不是 working.Here 是我的数据库 table 在设计视图中:

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

FROM 是 Microsoft OLE DB 提供程序中的 reserved keyword。您可能想将它与方括号一起使用,例如 [FROM]。但作为最佳实践,将其更改为 -保留字。

但更重要

你应该总是使用 parameterized queries. This kind of string concatenations are open for SQL Injection 攻击。

还可以使用 using statement 自动处理 OleDbConnectionOleDbCommand,而不是手动调用 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);
    }   
}

"from"是Microsoft access的保留字,改成非保留字如"desfrom"它应该可以正常工作。