我编写此代码以将数据插入到我的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 + "')";
它完美无瑕。我找不到它为什么不工作。这是我在设计视图中的数据库表:
我尝试了很多,但我仍然不明白为什么它不起作用。
答案 0 :(得分:6)
FROM
是Microsoft OLE DB提供程序中的reserved keyword。您可能希望使用方括号(如[FROM]
)。但作为最佳做法,请将其更改为非 - 保留字。
您应始终使用parameterized queries。这种字符串连接对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);
}
}
答案 1 :(得分:1)
"来自" 是Microsoft访问的保留字,将其更改为非保留字,例如" desfrom" 应该工作正常。