2015-11-13 130 views
0

異常詳細信息:System.Data.OleDb.OleDbException:INSERT INTO語句中的語法錯誤。.net,MS Access,INSERT INTO語句中的語法錯誤

源錯誤:

線168:comm.Parameters.Add(PARAM);

169行:

線170:整數= 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和數據屬性的類型是 用戶名:號碼,

產品編號:編號,

訂購日期:長文本,

ProductQty:數

IsCart:是/否

我在這個錯誤的幾個小時一直堅持,任何可以幫我找到它?謝謝。

+0

什麼是您的DBMS? –

+2

'Order'是一個保留關鍵字。用雙引號或反引號包圍它(如果使用mysql) –

+0

DBMS是MS Access –

回答

0

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

這可能是爲了保持一致性,爲防止進一步的不確定性保護(可能性很小,但有可能) ,或者甚至在查詢解析中對性能進行非常輕微的改進(這對於大容量情況可能是重要的)。

+0

謝謝!這有幫助。 –