未能将数据插入 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 自动处理 OleDbConnection
和 OleDbCommand
,而不是手动调用 Close
或 Dispose
方法。
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"它应该可以正常工作。
我编写了这段代码来将数据插入到我的 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 自动处理 OleDbConnection
和 OleDbCommand
,而不是手动调用 Close
或 Dispose
方法。
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"它应该可以正常工作。