繁体   English   中英

.net,MS Access,INSERT INTO语句中的语法错误

[英].net, MS Access, Syntax error in INSERT INTO statement

异常详细信息:System.Data.OleDb.OleDbbException:INSERT INTO语句中的语法错误。

源错误:

第168行:comm.Parameters.Add(param);

第169行:

第170行:int totalCount = comm.ExecuteNonQuery();

第171行:conn.Close();

第172行:

当代码运行以下方法时,我不断收到错误消息“ INSERT INTO语句中的语法错误”:

protected void makeOrder()
{
  OleDbConnection conn = new OleDbConnection();
  conn.ConnectionString = ConfigurationManager.ConnectionStrings["onlineStoreConnString"].ConnectionString;
  conn.Open();
  OleDbCommand comm = conn.CreateCommand();
  comm.CommandText = "INSERT INTO Order (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)";

  OleDbParameter param;
  param = comm.CreateParameter();
  param.DbType = DbType.String;
  param.Direction = ParameterDirection.Input;
  param.Value = Int32.Parse(Session["LoggedInId"].ToString());
  comm.Parameters.Add(param);

  param = comm.CreateParameter();
  param.DbType = DbType.String;
  param.Direction = ParameterDirection.Input;
  param.Value = Int32.Parse(Request.QueryString["id"].ToString());
  comm.Parameters.Add(param);

  param = comm.CreateParameter();
  param.DbType = DbType.String;
  param.Direction = ParameterDirection.Input;
  param.Value = DateTime.Now.ToString();
  comm.Parameters.Add(param);

  param = comm.CreateParameter();
  param.DbType = DbType.String;
  param.Direction = ParameterDirection.Input;
  param.Value = Int32.Parse(txtQty.Text);
  comm.Parameters.Add(param);

  param = comm.CreateParameter();
  param.DbType = DbType.String;
  param.Direction = ParameterDirection.Input;
  param.Value = true;   
  comm.Parameters.Add(param);

  int totalCount = comm.ExecuteNonQuery();
  conn.Close();

}

数据库为MS Access,属性的数据类型为UserID:Number,

产品编号:

OrderDate:长文本,

产品数量:数量

IsCart:是/否

我一直坚持这个错误几个小时,有什么可以帮助我找到它的吗? 谢谢。

Order 很可能是数据库引擎中的保留字,因为它是SQL查询中的关键字。 您需要将标识符括起来以防止将其误认为关键字。 根据您的数据库引擎,可能是这样的:

INSERT INTO [Order] (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)

或这个:

INSERT INTO `Order` (UserID, ProductID, OrderDate, ProductQty, IsCart) VALUES(?, ?, ?, ?, ?)

甚至其他内容(同样,取决于您的数据库)。

从技术上讲,出于多种原因,您可以(甚至可能想要)封装所有标识符:

INSERT INTO [Order] ([UserID], [ProductID], [OrderDate], [ProductQty], [IsCart]) VALUES(?, ?, ?, ?, ?)

这可能是为了保持一致性,防止进一步的歧义(不太可能,但可能),甚至是查询解析中的性能略有改善(对于大批量情况而言,这可能很重要)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM