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

时间:2016-03-12 09:51:10

标签: c# ms-access insert insert-into ms-access-2016

我编写此代码以将数据插入到我的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 + "')";

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

Designview of Database Table

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

2 个答案:

答案 0 :(得分:6)

FROM是Microsoft OLE DB提供程序中的reserved keyword。您可能希望使用方括号(如[FROM])。但作为最佳做法,请将其更改为 - 保留字。

但更重要的是

您应始终使用parameterized queries。这种字符串连接对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);
    }   
}

答案 1 :(得分:1)

"来自" 是Microsoft访问的保留字,将其更改为非保留字,例如" desfrom" 应该工作正常。