C# INSERT INTO语句出现Access 2013语法错误
我在c#中有以下查询,不知道为什么会显示此错误: “INSERT INTO语句出现语法错误” 我使用Access 2013C# INSERT INTO语句出现Access 2013语法错误,c#,ms-access,C#,Ms Access,我在c#中有以下查询,不知道为什么会显示此错误: “INSERT INTO语句出现语法错误” 我使用Access 2013 OleDbCommand command2 = new OleDbCommand(); command2.Connection = connection; command2.CommandText = "INSERT INTO money (price,cardnum,checknum,dateTime,employeeid) values('" +
OleDbCommand command2 = new OleDbCommand();
command2.Connection = connection;
command2.CommandText = "INSERT INTO money (price,cardnum,checknum,dateTime,employeeid) values('" + TempPrice + "','" + TempCriditNum + "','" + TempCheckNum + "','" + dateTimePickerX1.GetSelectedDateInPersianDateTime().ToShortDateString() + "','" + id + "')";
command2.ExecuteNonQuery();
connection.Close();
有几件事需要检查
- dateTime是一个保留字。试着用方括号括起来-
- 如果要处理的数据类型是日期\时间,则应将输入包装为#符号
- 如果数据类型不是字符串,请不要将它们括在引号中
- 正如贾健所指出的,应该使用参数化查询
- 正如HansUp所指出的,金钱也是一个保留字,所以用方括号括起来
command2.CommandText = "INSERT INTO [money] (price,cardnum,checknum,[dateTime],employeeid) values(" + TempPrice + "," + TempCriditNum + "," + TempCheckNum + ",#" + dateTimePickerX1.GetSelectedDateInPersianDateTime().ToShortDateString() + "#," + id + ")";
有几件事需要检查
- dateTime是一个保留字。试着用方括号括起来-
- 如果要处理的数据类型是日期\时间,则应将输入包装为#符号
- 如果数据类型不是字符串,请不要将它们括在引号中
- 正如贾健所指出的,应该使用参数化查询
- 正如HansUp所指出的,金钱也是一个保留字,所以用方括号括起来
command2.CommandText = "INSERT INTO [money] (price,cardnum,checknum,[dateTime],employeeid) values(" + TempPrice + "," + TempCriditNum + "," + TempCheckNum + ",#" + dateTimePickerX1.GetSelectedDateInPersianDateTime().ToShortDateString() + "#," + id + ")";
您的SQL语句可能易于SQL注入。考虑使用参数化查询,通过属性添加值,而不是连接它。 例如:
command2.CommandText = "INSERT INTO [money] (price, cardnum, checknum, [dateTime], employeeid) values(@tempPrice, @tempCreditNum, @tempCheckNum, @dateTime, @id)";
command2.Parameters.AddRange(new OleDbParameter[] {
new OleDbParameter("@tempPrice", TempPrice),
new OleDbParameter("@tempCreditNum", TempCriditNum),
new OleDbParameter("@tempCheckNum", TempCheckNum),
new OleDbParameter("@dateTime", dateTimePickerX1.GetSelectedDateInPersianDateTime().ToShortDateString()),
new OleDbParameter("@id", id)
});
command2.ExecuteNonQuery();
这也可以解决您的语法错误。您的SQL语句可能容易发生SQL注入。考虑使用参数化查询,通过属性添加值,而不是连接它。 例如:
command2.CommandText = "INSERT INTO [money] (price, cardnum, checknum, [dateTime], employeeid) values(@tempPrice, @tempCreditNum, @tempCheckNum, @dateTime, @id)";
command2.Parameters.AddRange(new OleDbParameter[] {
new OleDbParameter("@tempPrice", TempPrice),
new OleDbParameter("@tempCreditNum", TempCriditNum),
new OleDbParameter("@tempCheckNum", TempCheckNum),
new OleDbParameter("@dateTime", dateTimePickerX1.GetSelectedDateInPersianDateTime().ToShortDateString()),
new OleDbParameter("@id", id)
});
command2.ExecuteNonQuery();
这也应该解决你的语法错误。
请提供货币表的结构和完整的错误信息,请考虑使用参数化查询(请参阅),你的SQL语句容易出现SQL注入。@ VMACHAN的完整错误是“插入语句中的语法错误”。除了日期时间,我和所有字段都是数字。请提供货币表的结构和一个边注释的完整错误信息,考虑使用参数化查询(请参阅),您的SQL语句易于SQL注入。@ VMACHAN其完整错误是“插入语句中的语法错误”。“我的”和“所有”字段都是数字,但dateTime是dateTime。谢谢您的回复。我已经测试过了,但不起作用。这就是我在这里发帖的原因。数据库中的数据类型是datetime还是字符串?因为您还在引号中包装字段。它的日期时间。我错过了吗?是的,日期时间不应该用引号括起来,而应该用符号IIRC。您最好使用参数化查询。我也使用#,但仍然收到相同的错误:Othank You for reply。我已经测试过了,但不起作用。这就是我在这里发帖的原因。数据库中的数据类型是datetime还是字符串?因为您还在引号中包装字段。它的日期时间。我错过了吗?是的,日期时间不应该用引号括起来,而应该用符号IIRC。您最好使用参数化查询。我也使用#,但仍然收到相同的错误:Othanks。但新代码也会出现同样的错误:|。现在可以将oledb与命名参数一起使用吗?我记得它以前是基于索引的,你需要使用?在sql语句中,按顺序将参数添加到参数集合中。“这很有趣!”斯沃斯纳说!您仍然可以在声明中使用?
。@sajjad.rezaee请参见另一个答案中的注释,money
是保留关键字。同时考虑使用参数化查询!谢谢但新代码也会出现同样的错误:|。现在可以将oledb与命名参数一起使用吗?我记得它以前是基于索引的,你需要使用?在sql语句中,按顺序将参数添加到参数集合中。“这很有趣!”斯沃斯纳说!您仍然可以在声明中使用?
。@sajjad.rezaee请参见另一个答案中的注释,money
是保留关键字。同时考虑使用参数化查询!