c# INSERT INTO语句语法错误

本文关键字:语法 错误 语句 INTO INSERT | 更新日期: 2023-09-27 18:10:21

我有错误在行:ins.ExecuteNonQuery().ToString();OledDbException was unhandled in INSERT INTO语句语法错误。

如何解决这个问题?

string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:''Project.mdb";
OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString);
string newTagID = textBox1.Text;
string newUser = textBox2.Text;
string newAge = textBox3.Text;
string newPhoneNumber = textBox4.Text;
string insertString = "INSERT INTO jiahe ([Tag ID], User, Age, [Phone Number]) VALUES ('" + newTagID + "', '" + newUser + "', '" + newAge + "', '" + newPhoneNumber + "')";
OleDbCommand ins = new OleDbCommand(insertString, objConnection);
ins.Connection.Open();
ins.ExecuteNonQuery().ToString();
ins.Connection.Close();

c# INSERT INTO语句语法错误

您的问题可能是以下三个之一:

  1. 完全语法错误,不清楚地看到丑陋的未参数化SQL语句:p
  2. newUser或其他字段在某处有',并且正在搞砸语法。
  3. 您正在尝试插入一个数值(Age ?)作为字符串。

您应该可以轻松地解决前两个问题:在insertString语句构造之后创建一个断点,并检查字符串实际包含的内容。第三个更容易检查,只需查看数据库中表字段的数据类型。

尽管如此,您应该更改命令的使用,以使用参数,而不是使用字符串连接构建查询字符串(这容易受到sql注入攻击)。

这个问题很可能是因为[Tag ID], User, Age, [Phone Number]不是全部字符串。在SQL中,任何非字符串列数据都不应该用引号(')包装。

修复当前问题(假设[Tag ID]是一个整数):

    string insertString = "INSERT INTO jiahe ([Tag ID], User, Age, [Phone Number]) VALUES (" + newTagID + ", '" + newUser + "', '" + newAge + "', '" + newPhoneNumber + "')";

然而,你应该结构化你的代码,以避免sql注入,有更干净的代码,也不要担心引号:

    string insertString = "INSERT INTO jiahe ([Tag ID], User, Age, [Phone Number]) VALUES (@TagID, @User, @Age, @PhoneNumber)";
    OleDbCommand ins = new OleDbCommand(insertString, objConnection);
    ins.Parameters.Add(new OleDbParameter("@TagID",newTagID);
    ins.Parameters.Add(new OleDbParameter("@User",newUser);
    ins.Parameters.Add(new OleDbParameter("@Age",newAge);
    ins.Parameters.Add(new OleDbParameter("@PhoneNumber",newPhoneNumber);
    ins.Connection.Open();
    ins.ExecuteNonQuery();
    ins.Connection.Close();