C# INSERT INTO语句出现Access 2013语法错误

C# 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('" +

我在c#中有以下查询,不知道为什么会显示此错误:

“INSERT INTO语句出现语法错误”

我使用Access 2013

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
是保留关键字。同时考虑使用参数化查询!