我似乎無法將sqldatatime.minvalue轉換爲日期時間對象。如何將sqldatetime.minvalue轉換爲datetime?
我想:
Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
這顯然沒有奏效。
我似乎無法將sqldatatime.minvalue轉換爲日期時間對象。如何將sqldatetime.minvalue轉換爲datetime?
我想:
Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
這顯然沒有奏效。
任何理由不僅僅使用explicit conversion operator?
DateTime dt = (DateTime) SqlDateTime.MinValue;
這對我的作品:
using System;
using System.Data.SqlTypes;
class Test
{
static void Main()
{
DateTime dt = (DateTime) SqlDateTime.MinValue;
Console.WriteLine(dt);
}
}
爲什麼會這樣工作,而不是Convert.ToDateTime()奇怪的沒有? – codecompleting
@codecompleting,'Convert.ToDateTime'需要一個適當的重載來支持'SqlDateTime'的值。 'Convert'的設計者一定沒有考慮過[足夠重要],而'SqlDateTime'的設計者確實做到了。 –
您收到的答案向您顯示了兩種不同的方式來轉換值。一種是使用爲SqlDateTime
至DateTime
定義的明確轉換,另一種是訪問SqlDateTime
實例上的.Value
屬性,該實例返回DateTime
。
var date = theSqlDate.Value; // via property
var date = (DateTime)theSqlDate; // via explicit conversion
有一些值得考慮的折衷。 SqlDateTime
通過值SqlDateTime.Null
支持數據庫中空值的概念(DBNull,由另一個現在已刪除的答案引用)。如果您訪問「null」實例上的Value
屬性,則會遇到SqlNullValueException
。另一方面,顯式轉換爲DateTime導致{January 1, 1900 12:00:00 AM}
。這些結果在你的代碼中都不需要。使用非空默認值覆蓋數據庫中的有效空條目可能與在運行時獲取異常一樣糟糕。
如果您在數據庫中有一個可爲空的列,並且您正在使用SqlDateTime
,則可能需要以不同方式明確測試並處理SqlDateTime.Null
,然後使用哪種方法轉換其他值可能無關緊要。
DateTime? date;
if (theSqlDate.Equals(SqlDateTime.Null))
date = null
else
date = theSqlDate.Value; // or (DateTime)theSqlDate;
這比一個比Jon Skeet更好的答案要好得多。 –
感謝您的支持。你的代碼幫助我讀取SQL返回'DateTime dateValue = Convert.ToDateTime(reader.GetValue(8));' – 2012-10-10 22:39:18