【问题标题】:.net, MS Access, Syntax error in INSERT INTO statement.net、MS Access、INSERT INTO 语句中的语法错误
【发布时间】:2015-11-13 19:15:30
【问题描述】:

异常详细信息:System.Data.OleDb.OleDbException: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,属性的数据类型是 用户 ID:号码,

产品ID:编号,

OrderDate:长文本,

产品数量:数量

IsCart:是/否

我已经在这个错误中坚持了几个小时,任何人可以帮助我找到它吗?谢谢。

【问题讨论】:

  • Order 是保留关键字。用双引号或反引号括起来(如果使用 mysql)
  • DBMS 是 MS Access
  • 谢谢!这就是问题所在。

标签: c# sql .net ado.net


【解决方案1】:

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(?, ?, ?, ?, ?)

这可能是为了保持一致性,防止进一步的歧义(不太可能,但可能),甚至是为了在查询解析中实现非常轻微的性能改进(这对于大容量情况可能很重要)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多