繁体   English   中英

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

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

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

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

数据库表的设计视图

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

FROM是Microsoft OLE DB提供程序中的保留关键字 您可能希望将其与[FROM]类的方括号一起使用。 但是,作为最佳实践,请将其更改为非保留字。

但更重要

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

也可以使用using语句自动处理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访问的保留字,将其更改为非保留字(例如“ desfrom”) ,它应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM