【问题标题】:Failing to insert data into MS Access database (syntax error in INSERT INTO statement.)无法将数据插入 MS Access 数据库(INSERT INTO 语句中的语法错误。)
【发布时间】:2016-03-12 09:51:10
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    但更重要的是

    您应该始终使用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);
        }   
    }
    

    【讨论】:

    • 我希望我能对此给予 100 分的支持 - 这绝对是至关重要,每个学习使用数据库编程的人都应该阅读并接受这一点!
    • @marc_s 非常感谢。听到这样的人/用户喜欢你,这些对我来说很重要。我真的很感激。
    【解决方案2】:

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

    【讨论】:

    • 你不觉得你迟到了一点,比如一个多小时? :)
    • 哈哈,我找到了,所以我回答了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多