2011-07-01 35 views
1

將DateTime值作爲DbParameter傳遞給查詢時遇到問題。看起來時間部分的DateTime值被剝離了。將DateTime值作爲參數傳遞給OleDbCommand

這裏是C#示例代碼:

DbProviderFactory _factory = OleDbFactory.Instance; 

DbCommand cmd = _factory.CreateCommand(); 
cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (?)"; 

DbParameter p = _factory.CreateParameter(); 
p.ParameterName = ""; // Not necessary 
p.Value = DateTime.Now; // assume Time != 00:00:00 
p.DbType = DbType.Date; // DateTime and DateTime2 don't work 

cmd.Parameters.Add(p); 

我的問題是,日期參數似乎沒有達到訪問與它的一部分時間和SomeDateField總是00:00:00的時間。

我不想做這樣的事情:

cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (#" + aDateTimeString + "#)"; 
+0

什麼是數據類型數據庫表中的列的列?另外你是什麼意思'DbType.DateTime'不起作用? –

+0

當我使用DbType.DateTime和DbType.DateTime2時,執行命令時出現'條件表達式中的數據類型不匹配'異常。 –

+0

我使用Access作爲後端,因此列數據類型是Date,但它與.NET中的DateTime等效,它也可以包含時間部分。 –

回答

0

確保您的數據類型爲SomeDateFieldDateTime,而不是Date。另外,儘量使

p.DbType = DbType.DateTime; 
+0

正如我在另一條評論中所說的,我使用DateTime和DateTime2時遇到了異常。唯一有效的是Date。 –

0

當你使用OleDbType.DateTime代替DbType.Date,我敢肯定它會工作。

但是,據我所知,從你的文章中,你不想這麼具體,並使用更一般的DbType枚舉(和類)?

但是,我認爲你應該在你的數據訪問層使用更具體的OleDb類。使用較少指定的'DbType'類是沒有用的,因爲當你定位另一個數據庫類型時,由於每個DBMS使用自己的方言,所以你的SQL語法也必須改變的機會很大。有時只是微小的變化,但仍......)。

+0

那麼,我正在使用一些已經具有較少特定接口的代碼,這就是我使用它們的原因。我可以改變這一點,但我認爲它不應該是必要的。我會嘗試使用OleDb clases,看看是否有幫助。 –

相關問題