Nếu bạn không sử dụng các loại nullable, điều tốt nhất để làm là kiểm tra xem giá trị của cột là DBNull. Nếu nó là DBNull, sau đó thiết lập tham chiếu của bạn đến những gì bạn sử dụng cho null/empty cho datatype tương ứng.
DataRow row = ds.Tables[0].Rows[0];
string value;
if (row["fooColumn"] == DBNull.Value)
{
value = string.Empty;
}
else
{
value = Convert.ToString(row["fooColumn"]);
}
Như Manu nói, bạn có thể tạo ra một lớp chuyển đổi với một phương pháp chuyển đổi quá tải cho mỗi loại, do đó bạn không cần phải tiêu mã của bạn với if/else khối.
Tuy nhiên, tôi sẽ nhấn mạnh rằng các loại nullable là tuyến đường tốt hơn để đi nếu bạn có thể sử dụng chúng. Lý do là với các kiểu không nullable, bạn sẽ phải dùng đến "các số ma thuật" để biểu diễn null. Ví dụ, nếu bạn đang ánh xạ một cột tới một biến int, bạn sẽ đại diện cho DBNull như thế nào? Thông thường bạn không thể sử dụng 0 vì 0 có ý nghĩa hợp lệ trong hầu hết các chương trình. Thường thì tôi thấy mọi người bản đồ DBNull thành int.MinValue, nhưng điều đó cũng có thể có vấn đề. Lời khuyên tốt nhất của tôi là:
- Đối với các cột có thể rỗng trong cơ sở dữ liệu, hãy sử dụng các loại có thể vô hiệu.
- Đối với các cột không thể rỗng trong cơ sở dữ liệu, hãy sử dụng các loại thông thường.
Loại dễ vỡ được thực hiện để giải quyết vấn đề này. Điều đó đang được nói, nếu bạn đang ở trên một phiên bản cũ của khuôn khổ hoặc làm việc cho một người không grok loại nullable, ví dụ mã sẽ làm các trick.
Nguồn
2008-08-25 22:59:59
đóng: [hiệu quả nhất-cách-to-check-cho-dbnull-và-sau đó-gán-cho-một biến] (http://stackoverflow.com/questions/221582/most-efficient-way -to-check-for-dbnull-và-sau đó-gán-cho-một-biến) – nawfal