2013-07-29 74 views
0

我剛剛花了最近幾個小時嘗試做一些我認爲會很簡單的事情。當我嘗試在Access 2007數據庫上運行帶有日期的參數化查詢時,遇到「標準表達式中的數據類型不匹配」錯誤。數據庫中的問題列是「日期/時間」數據類型。用C#查詢Access 2007的日期時間#

在一個簡化的示例 -

dataCommand.CommandText "SELECT * FROM tblData WHERE IDate > #24/07/2013 16:54:51#"

這工作。但只要我嘗試參數化日期,我遇到錯誤。所以..

dataCommand.CommandText = "SELECT * FROM tblData WHERE IDate > @BackSearchDate" 
.... 
dataCommand.Parameters.Add(new OleDbParameter("@BackSearchDate", backSearchDate)) 

會遇到錯誤。我試圖以多種方式提供backSearchDate變量。日期時間,各種格式的字符串等不起作用。

我發現this page這將表明這是一個已知的錯誤 - 但我還沒有能夠得到任何的解決方法在頁面上工作。我很難過。

在此先感謝您的幫助。

+0

發送參數時,您沒有在#日期時間#中封裝日期時間,但如果您請分享。 – Elias

+0

另外,只要在黑暗中拍攝一張照片,如果您將##放入參數中,那麼它可能是以字符串的形式讀取它? – Elias

+0

你嘗試過'dataCommand.Parameters.AddWithValue(「@ BackSearchDate」,backSearchDate)嗎? –

回答

0

那麼,我要說的是:

dataCommand.CommandText = "SELECT * FROM tblData WHERE IDate > @BackSearchDate" 

編輯

檢出Gord Thompson的回答表明,你應該嘗試:

var conn = new OleDbConnection(@"ConnString"); 
conn.Open(); 
var cmd = new OleDbCommand(
       "SELECT * FROM tblData WHERE IDate > @BackSearchDate", 
       conn); 
cmd.Parameters.AddWithValue("@BackSearchDate", new DateTime(backSearchDate)); 
OleDbDataReader rdr = cmd.ExecuteReader(); 
+0

嗨埃利亞斯。謝謝回覆。我知道當DateTime值在參數中時不需要#,所以我沒有這樣做。我只是嘗試了以上,並得到一個語法錯誤。 – KorbenDallas

+0

好吧,我不確定它是否會失敗,對不起,我不能有更多的幫助。祝你好運! – Elias

+0

有點晚了,但我正在重試回答這個問題@ user2598782 – Elias

0

爲了任何人在遇到此問題未來 - 如果您按以下方式添加參數,它似乎工作:

DbParameter p = dataCommand.CreateParameter(); 
p.ParameterName = "@BackSearchDate"; 
p.Value = backSearchDate; 
p.DbType = DbType.Date; 
dataCommand.Parameters.Add(p);