簡體   English   中英

將 DateTime 值作為參數傳遞給 OleDbCommand

[英]Passing a DateTime value as a parameter to an OleDbCommand

我在將 DateTime 值作為 DbParameter 傳遞給查詢時遇到問題。 似乎 DateTime 值的時間部分被剝離了。

這是 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);

我的問題是 Date 參數似乎沒有通過它的時間部分到達 Access 並且 SomeDateField 總是有 00:00:00 作為時間。

我不想做類似的事情:

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

OleDbType 沒有 DateTime 枚舉http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtype.aspx

如果使用 DBType.DateTime,“參數的類型特定於 .NET Framework 數據提供者。指定類型會將 Parameter 的值轉換為數據提供者的類型,然后再將值傳遞給數據源。如果類型不是指定時,ADO.NET 從參數 object 的 Value 屬性推斷參數的數據提供者類型。“http://msdn.microsoft.com/en-us/library/system.x

確保SomeDateField的數據類型是DateTime而不是Date 另外,嘗試制作

p.DbType = DbType.DateTime;

當您使用OleDbType.DateTime而不是DbType.Date時,我相信它會起作用。

但是,正如我從您的帖子中了解到的那樣,您不想如此具體,而是使用更通用的 DbType 枚舉(和類)?

但是,我認為您應該在數據訪問層中使用更具體的 OleDb 類。 使用較少指定的“DbType”類是無用的,因為當您針對另一種數據庫類型時,您的 SQL 語法也必須更改的可能性很大,因為每個 DBMS 都使用自己的方言(有時只有微小的變化,但仍然......)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM