Có sự khác biệt nào giữa null và System.DBNull.Value không? Nếu có, nó là cái gì?Sự khác nhau giữa null và System.DBNull.Value là gì?
tôi nhận thấy hành vi này ngay bây giờ -
while (rdr.Read())
{
if (rdr["Id"] != null) //if (rdr["Id"] != System.DBNull.Value)
{
int x = Convert.ToInt32(rdr["Id"]);
}
}
Trong khi tôi lấy dữ liệu từ cơ sở dữ liệu sử dụng một datareader sql, mặc dù không có giá trị trả về if(rdr["Id"] != null)
trở true
và cuối cùng ném một ngoại lệ cho đúc một null như số nguyên.
Nhưng, điều này nếu tôi sử dụng if (rdr["Id"] != System.DBNull.Value)
trả lại false
.
Sự khác nhau giữa null và System.DBNull.Value là gì?
Vâng, chúng không liên quan. Một là một thể hiện tĩnh của một lớp trong 'System.Data', và một là một giá trị đặc biệt biểu thị sự thiếu tham chiếu. Họ không có gì để làm với nhau. Bạn có thể giải thích về những gì bạn đang bối rối không? Là câu hỏi thực sự của bạn "tại sao' DataRows' và 'DataReaders' đặt' DBNull.Value' bên trong bản thân thay vì 'null'?" – mquander
Vâng, tôi không phải lúc đầu nhưng sau khi học hỏi từ những gì bạn nói, tôi tò mò. Bạn có thể cho tôi biết tại sao DataRows và DataReaders đặt DBNull.Value vào bản thân thay vì null? – pavanred
Tôi không chắc chắn bản thân mình. Đây là một câu trả lời: http://stackoverflow.com/questions/4488727/what-is-the-point-of-dbnull/4488758#4488758 Cũng có thể là trước khi các kiểu giá trị rỗng có trong C#, nó sẽ có nhiều hơn một rắc rối để đối phó với 'null'. – mquander