[英]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.