我遇到错误: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();
答案 0 :(得分:1)
你的问题可能就是这三个问题:
newUser
或某个其他字段在某处有'
,并且正在搞砸语法。Age
?)作为字符串插入。您应该轻松解决前两个在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();