2011-10-07 38 views
43

Tôi không thể chuyển đổi giá trị sqldatatime.minvalue thành đối tượng datetime.Làm thế nào để chuyển đổi sqldatetime.minvalue thành datetime?

tôi đã cố gắng:

Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue); 

Đó rõ ràng là đã không làm việc.

+0

Cảm ơn vì điều này. Mã của bạn đã giúp tôi đọc một trả về SQL 'DateTime dateValue = Convert.ToDateTime (reader.GetValue (8));' –

Trả lời

62

Bất kỳ lý do nào không chỉ sử dụng explicit conversion operator?

DateTime dt = (DateTime) SqlDateTime.MinValue; 

đó làm việc cho tôi:

using System; 
using System.Data.SqlTypes; 

class Test 
{ 
    static void Main() 
    { 
     DateTime dt = (DateTime) SqlDateTime.MinValue; 
     Console.WriteLine(dt); 
    } 
} 
+0

tại sao điều đó sẽ hoạt động và không phải là Convert.ToDateTime() lạ không? – codecompleting

+4

@codecompleting, 'Convert.ToDateTime' sẽ cần quá tải thích hợp để hỗ trợ giá trị' SqlDateTime'. Các nhà thiết kế của 'Convert' không được coi là đủ [quan trọng], trong khi các nhà thiết kế' SqlDateTime' chắc chắn đã làm. –

126

Không cần phải chuyển đổi. SqlDateTime có thuộc tính Value trả về một DateTime.

DateTime dt = SqlDateTime.MinValue.Value; 
+30

Một câu hỏi hiếm hoi mà có một câu trả lời tốt hơn cho Jon Skeets :-) – PeteT

+1

Tôi không thấy điều đó xảy ra. –

14

Câu trả lời bạn nhận được đã cho bạn thấy hai cách khác nhau để chuyển đổi giá trị. Một là sử dụng chuyển đổi rõ ràng được xác định cho SqlDateTime thành DateTime, cách khác là truy cập thuộc tính .Value trên cá thể SqlDateTime, trả về số DateTime.

var date = theSqlDate.Value; // via property 
var date = (DateTime)theSqlDate; // via explicit conversion 

Có sự cân nhắc đáng xem xét. SqlDateTime hỗ trợ khái niệm về giá trị null trong cơ sở dữ liệu (DBNull, được tham chiếu bởi một câu trả lời đã xóa khác) thông qua giá trị SqlDateTime.Null. Nếu bạn truy cập vào thuộc tính Value trên phiên bản "không hợp lệ", bạn sẽ chạy vào một SqlNullValueException. Mặt khác, một chuyển đổi rõ ràng đối với kết quả DateTime trong {January 1, 1900 12:00:00 AM}. Không có kết quả nào trong số các kết quả này có thể được mong muốn trong mã của bạn. Ghi đè một mục nhập null hợp lệ tại cơ sở dữ liệu với một giá trị mặc định không null có thể chỉ là xấu như nhận được một ngoại lệ khi chạy.

Nếu bạn có một cột nullable trong cơ sở dữ liệu, và nếu bạn đang làm việc với SqlDateTime, bạn có thể cần phải kiểm tra một cách rõ ràng cho điều trị và SqlDateTime.Null cách khác nhau, và sau đó nó có thể không quan trọng mà cách tiếp cận bạn đi để chuyển đổi các giá trị khác.

DateTime? date; 
if (theSqlDate.Equals(SqlDateTime.Null)) 
    date = null 
else 
    date = theSqlDate.Value; // or (DateTime)theSqlDate; 
+5

Đó là câu trả lời hiếm hoi tốt hơn câu trả lời tốt hơn câu trả lời của Jon Skeet. –

Các vấn đề liên quan