我有以下代码:
OleDbConnection aConnection = new
OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=storage_db.accdb");
string sql = "INSERT INTO Client cname,phone,password)
VALUES('"+textBox1.Text+"','"+textBox2.Text+"',
'"+textBox3.Text+"')";
aConnection.Open();
OleDbCommand insert = new OleDbCommand(sql, aConnection);
insert.ExecuteNonQuery();
aConnection.Close();
但是当我尝试插入数据时,我在插入查询中遇到异常语法错误。我做错了什么?
答案 0 :(得分:2)
Password
是Access中的保留字,因此您需要将password
列包装在查询中的方括号中。您还需要将要插入数据的列包装到括号中:
INSERT INTO (Client cname,phone,[password]) VALUES(...
正如@HarveySpecter在评论中指出的那样,您还应该使用参数化查询而不是连接用户输入,否则您将面临SQL注入攻击。
答案 1 :(得分:1)
试试这个:
string sql = "INSERT INTO Client (cname, phone, [password])
VALUES('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
你忘了括号。 但最好使用参数查询。
答案 2 :(得分:1)
您的插入语法不正确...您需要()围绕要插入的字段和值子句......
insert into Client
( cname, phone, [password] )
values
( ?, ?, ? )
“?”是参数的占位符,参数语句必须与“?”的顺序相同代表。另外,请注意......如果预期值为数字,日期等,请确保您在参数中设置的值也是正确的数据类型。但在你的情况下,这些都是基于字符串的。
OleDbCommand insert = new OleDbCommand(sql, aConnection);
insert.Parameters.Add( "parmName", textBox1.Text );
insert.Parameters.Add( "parmPhone", textBox2.Text );
insert.Parameters.Add( "parmPwd", textBox3.Text );