INSERT INTO语句中的C#语法错误

时间:2011-10-04 15:55:14

标签: c# insert oledb

我遇到错误:ins.ExecuteNonQuery()。ToString(); 在INSERT INTO语句中未处理OledDbException语法错误。

我该如何解决这个问题?

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();

2 个答案:

答案 0 :(得分:1)

你的问题可能就是这三个问题:

  1. 使用可疑的unparametrized SQL语句无法清楚地看到公共语法错误:p
  2. newUser或某个其他字段在某处有',并且正在搞砸语法。
  3. 您正在尝试将数值(Age?)作为字符串插入。
  4. 您应该轻松解决前两个在insertString语句构造之后创建断点并检查字符串确实包含的内容。第三个更容易检查,只需查看数据库中表格字段的数据类型。

答案 1 :(得分:0)

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

问题很可能是因为[标签ID],用户,年龄,[电话号码]不是所有字符串。在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();