簡體   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