[英]Syntax error in INSERT INTO statement using C# with ms-access
[英]C# MS-Access SQL INSERT INTO Error
我为C#程序编写了一组代码,以将记录插入Access数据库。 这是代码:
OleDbCommand cmd = new OleDbCommand("INSERT INTO Deployment ([DateTransacted], [ProductType], Brand, Model, SerialNo, Assignment) VALUES ('May 20, 2013', 'LAPTOP', 'ASUS', 'K55V', 'ABCD1234', '10F HRD',)", cnn);
cmd.CommandType = CommandType.Text;
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
该程序是可执行的。 但是,弹出错误提示:
INSERT INTO语句中的语法错误
[DateTransacted]是字符串类型。 我该怎么办?
你有一个额外的逗号,
在你插入语句的结束。
OleDbCommand cmd = new OleDbCommand("INSERT INTO Deployment
([DateTransacted], [ProductType], Brand, Model, SerialNo, Assignment)
VALUES ('May 20, 2013', 'LAPTOP', 'ASUS', 'K55V', 'ABCD1234', '10F
HRD',)", cnn);
^^^
删除它,您会很高兴,您的声明应为
OleDbCommand cmd = new OleDbCommand("INSERT INTO Deployment
([DateTransacted], [ProductType], Brand, Model, SerialNo, Assignment)
VALUES ('May 20, 2013', 'LAPTOP', 'ASUS', 'K55V', 'ABCD1234', '10F
HRD')", cnn);
如果您使用strinc串联来构成查询,则考虑使用参数化查询 ,这也将使您免于Sql Injection
删除,
在sql语句的末尾
"INSERT INTO Deployment ([DateTransacted], [ProductType], Brand, Model, SerialNo, Assignment) VALUES ('May 20, 2013', 'LAPTOP', 'ASUS', 'K55V', 'ABCD1234', '10F HRD')"
最好使用参数和如下所示的块,
using(var con = new OleDbConnection(connectionString))
using (OleDbCommand cmd =
new OleDbCommand(@"INSERT INTO Deployment ([DateTransacted], [ProductType], Brand, Model, SerialNo, Assignment) VALUES (?,?,?,?,?,?)", con))
{
con.Open();
cmd.Parameters.AddWithValue("@p1", "May 20, 2013"); // if you have date time column give DateTime object as value
cmd.Parameters.AddWithValue("@p2", "LAPTOP");
cmd.Parameters.AddWithValue("@p3", "ASUS");
cmd.Parameters.AddWithValue("@p4", "K55V");
cmd.Parameters.AddWithValue("@p5", "ABCD1234");
cmd.Parameters.AddWithValue("@p6", "10F HRD");
cmd.ExecuteNonQuery();
}
删除不必要的逗号;
OleDbCommand cmd = new OleDbCommand("INSERT INTO Deployment ([DateTransacted], [ProductType], Brand, Model, SerialNo, Assignment) VALUES ('May 20, 2013', 'LAPTOP', 'ASUS', 'K55V', 'ABCD1234', '10F HRD',)", cnn);
^^ Delete it
您可以使用它;
OleDbCommand cmd = new OleDbCommand("INSERT INTO Deployment(DateTransacted, ProductType, Brand, Model, SerialNo, Assignment)
VALUES ('May 20, 2013', 'LAPTOP', 'ASUS', 'K55V', 'ABCD1234', '10FHRD')", cnn);
顺便说一句, DateTransacted
和ProductType
在ms访问中不是保留字。 您不需要将它们与方括号一起使用。
使用参数化查询可以避免所有语法错误并避免SQL注入。
代码应为:
OleDbCommand cmd = new OleDbCommand("INSERT INTO Deployment VALUES (@dateOfTran, @prodType, @Brand, @Model, @serNum, @assignment)", cnn);
cmd.CommandType = CommandType.Text;
cnn.Open();
cmd.parameters.AddWithValue("@dateOfTran",'May 20, 2013');
cmd.parameters.AddWithValue("@prodType",'LAPTOP');
.
.
.
cmd.ExecuteNonQuery();
cnn.Close();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.