2012-10-30 53 views
1

好吧,我確實有一個OLEDB函數可以將數據插入數據庫。以及我知道如何使用OLEDB SQL的常見方式,但我想在這裏做的是參數化查詢字符串中的每個數據。C#使用MS Access的參數化OLEDB查詢

現在我在Google上呆了將近3個小時,只知道如何在OLEDB中進行參數化查詢,但所有這些查詢都不適合我。

最後我的查詢

現在似乎在代碼中很好地工作之下,但仍然出現了錯誤

我的功能代碼:

private bool dbInsert(int [] inputNumbers, DateTime datetime){ 
       try { 
        String sql = "INSERT INTO 655(1stNum, 2ndNum, 3rdNum, 4thNum, 5thNum, 6thNum, datedraw) VALUES(?, ?, ?, ?, ?, ? ,?)"; 
        OleDbCommand dbcmd = new OleDbCommand(sql, app.oleDbConn()); 
        dbcmd.Connection.Open(); 
        dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[0]; 
        dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[1]; 
        dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[2]; 
        dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[3]; 
        dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[4]; 
        dbcmd.Parameters.Add("?",OleDbType.Numeric).Value = inputNumbers[5]; 
        dbcmd.Parameters.Add("?",OleDbType.DBTimeStamp).Value = datetime; 
        dbcmd.ExecuteNonQuery(); 
        dbcmd.Connection.Close(); 

       }catch(OleDbException ex){ 
        showPrompt("Error reading the database",Color.Red); 
        Console.WriteLine(ex.ToString()); 
       } 
       return true; 
      } 

這是在控制檯中的錯誤日誌顯示:

System.Data.OleDb.OleDbException:條件 數據類型不匹配表達。在在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult 小時)在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(對象&(tagDBPARAMS dbParams,對象&的ExecuteReuslt) 的ExecuteReuslt)在 System.Data.OleDb.OleDbCommand.ExecuteCommand(的CommandBehavior 行爲,在 System.Data.OleDb對象在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(的CommandBehavior 行爲,字符串方法)&的ExecuteReuslt)。 OleDbCommand.ExecuteNonQuery()

我列在我的Access數據庫文件中的數據類型是從1stNum到6thNum和日期/在datedraw時間,當然ID是自動編號

數字沒有任何過失的parametize查詢實現?請幫幫我。

更新

  • 我在訪問的NUMS的OleDBType更改爲數字作爲提交其數字
+1

[MSDN](http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtype.aspx)說,' DBDateTime'必須爲格式'yyyymmddhhmmss'。它看起來不像你格式化。也許這是問題? – cadrell0

+0

@cadrel讓我檢查它,謝謝 –

+0

對不起,仍然是相同的錯誤:( –

回答

1

您需要大約值單引號,像這樣:

String sql = 
    "INSERT INTO 655(1stNum, 2ndNum, 3rdNum, 4thNum, 5thNum, 6thNum, datedraw) 
    VALUES('?', '?', '?', '?', '?', '?' ,'?')"; 

另外,你有沒有嘗試插入一個真正的整數而不是"?"

+0

那麼怎麼樣? ?它的日期時間 –

+0

好吧我試着把數字直接在查詢中工作..但爲什麼呢?是否有任何與oledbtype的錯誤? –

+0

這是因爲你設置的值是一個整數,但傳入一個問號,不是一個整數 – Niklas

2

有一件事我會檢查的類型是:OleDbType.DBTimeStamp

如果我還記得,時間戳是一種特殊類型的,這不是容易與DateTime類型兼容。

注意的OleDb可以使用命名參數:詳見MS Access, Named parameters and Column Names