2009-11-21 49 views

Trả lời

6

Nếu cột là kiểu string, nhưng là nullable, những gì về việc cố gắng:

// FirstName must allow null 
FirstName = dr["FirstName"] as string 

hoặc

// FirstName would be empty for a NULL in the database 
FirstName = (dr["FirstName"] as string) ?? string.Empty 
+0

Chuỗi là "nullable" theo mặc định, vì chúng là các loại tham chiếu. –

+1

Tôi đã nói về cột và không phải là loại chuỗi. –

1

Chuyển cột và giá trị mặc định cho hàm trợ giúp kiểm tra rỗng và trả về giá trị mặc định nếu null hoặc giá trị cột nếu không rỗng.

2

dr["FirstName"].ToString() sẽ thường xuyên ném ngoại lệ con trỏ null bởi vì bạn đang cố gắng truy cập ToString trên một đối tượng null. Ngoài ra, chuỗi có thể được null, vì vậy thực sự, nếu bạn biết đó là một chuỗi, và bạn không nhớ rằng đó là null, nó muốn được an toàn để làm

FirstName = (String) dr["FirstName"] 
+1

Đó là sai, ngoại lệ con trỏ null sẽ không xảy ra ở đây. Nếu nội dung cột là null, một đối tượng 'System.DBNull' được trả về và' .ToString() 'trả về một chuỗi rỗng, trong khi' (chuỗi) 'hoặc' như chuỗi' trả về 'null'. –

1

Bạn có thể sử dụng sau đây để trở về một chuỗi trống nếu cột là null.

FirstName = string.format("{0}", dr["FirstName"]) 
3

Tôi tin rằng, ô nuôi cấy dữ liệu không thể là lý do cho vấn đề của bạn. Có lẽ cột không tồn tại, hoặc bất kỳ lỗi nào khác xảy ra, hoặc bản thân DataRow là null và bạn nên xử lý điều đó. Nhìn vào ngoại lệ - "dường như thổi lên" không phải là một mô tả hợp lệ về vấn đề của bạn.

Sau đây giải thích rằng, nhưng cũng sẽ trả lời câu hỏi từ tiêu đề cho mọi người khác.

Nếu giá trị cột là null, một đối tượng System.DBNull được trả lại, và .ToString() trả về một chuỗi rỗng, trong khi (string) hoặc as string trở null.

Vì vậy, không có ý nghĩa gì khi kiểm tra mục được trả lại cho ==null vì không bao giờ đánh giá được true.

  • Nếu bạn chấp nhận chuỗi rỗng, mã của bạn đã tối ưu, không cần xử lý trường hợp DBNull.
  • Nếu bạn muốn nhận null, hãy thay đổi .ToString() thành as string.
  • Nếu bạn muốn xử lý theo bất kỳ cách nào khác, hãy sử dụng if (dr.IsNull("FirstName")) hoặc thực hiện ==null trên biến mục tiêu sau as string.
Các vấn đề liên quan