SQL null không giống với .NET null; bạn phải so sánh với System.DBNull.Value:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
Để trả lời cho nhận xét của bạn, kiểu dữ liệu của Item
thuộc tính của DataReader
là kiểu cơ sở dữ liệu cơ bản. Nó có thể là System.Data.SqlTypes.SqlDateTime
cho cơ sở dữ liệu SQL Server không rỗng hoặc System.DBNull
cho cột rỗng hoặc System.Data.Odbc.OdbcTypes.SmallDateTime
cho cơ sở dữ liệu ODBC hoặc thực sự chỉ về bất kỳ thứ gì. Điều duy nhất bạn có thể dựa vào là nó thuộc loại object
.
Đây cũng là lý do tại sao tôi khuyên bạn nên sử dụng Convert.ToDateTime()
thay vì ép buộc nhập vào DateTime
. Không có gì đảm bảo rằng ODBC hoặc bất kỳ cột ngày nào có thể bị ép buộc vào một .NET DateTime
. Tôi lưu ý rằng nhận xét của bạn chỉ định một "sqldatareader" và một SQL Server System.Data.SqlTypes.SqlDateTime
thực sự có thể bị ép buộc vào System.DateTime
, nhưng câu hỏi ban đầu của bạn không cho chúng tôi biết điều đó.
Để biết thêm thông tin về cách sử dụng DataReader
s, tham khảo ý kiến MSDN.