为什么说SQL语句中有错误插入

时间:2017-04-06 15:30:50

标签: c# ms-access oledbconnection oledbcommand

我正在学习连接到Microsoft Access并写入数据库。我在Access中创建了一个数据库,并希望将数据插入其中。

 OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Amin\Desktop\NamesDatabase1.accdb");

 OleDbCommand cmd = new OleDbCommand();
 string FN = textBox1.Text;
 string LN = textBox2.Text;

 cmd.CommandText = "INSERT INTO Names (FirstName, LastName) Values (FN,LN)";
 cmd.Connection = conn;

 conn.Open();
 cmd.ExecuteNonQuery();

在我跑步之前似乎没有错误。我运行该程序,更新我的textBox1.texttextBox2.text并按SAVE,然后我收到错误:

  

SQL语句中的SYNTAX ERROR插入

我做错了什么?

2 个答案:

答案 0 :(得分:3)

在您的插入中,您尝试添加为值FNLN。这些值在命令范围中不存在,因此它不知道tu对它做了什么。您想要的是将这些值设置为参数,然后将它们的值与命令一起添加:

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Amin\Desktop\NamesDatabase1.accdb");
OleDbCommand cmd = new OleDbCommand();
string FN = textBox1.Text;
string LN = textBox2.Text;
cmd.CommandText = "INSERT INTO Names (FirstName, LastName) Values (@FN,@LN)";
cmd.Connection = conn;
cmd.Parameters.Add(new OleDbParameter("@FN", FN));
cmd.Parameters.Add(new OleDbParameter("@LN", LN));
conn.Open();
cmd.ExecuteNonQuery();

答案 1 :(得分:0)

您的代码正在崩溃,因为FN和LN是C#变量,您正试图将它们传递给查询。这不会在SQL中产生正确的语法。

您需要将FN和LN作为参数传递给查询。

将您的代码更改为以下内容。

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Amin\Desktop\NamesDatabase1.accdb");
OleDbCommand cmd = new OleDbCommand();
string FN = textBox1.Text;
string LN = textBox2.Text;
cmd.CommandText = "INSERT INTO Names (FirstName, LastName) Values (@FN,@LN)";
cmd.Parameters.Add(new OleDbParameter("@FN", FN));
cmd.Parameters.Add(new OleDbParameter("@LN", LN));
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();

这可以解决您的问题。