Dot-Net

DataSet 中的可空 Int 列

  • November 29, 2014

我正在使用 .NET 強類型數據集,並且有一個帶有可為空的 int 列(以及可為空的 DateTime 列)的表。

顯然,數據集設計器存在一個錯誤,該錯誤會阻止在這些數據類型上具有可為空的列。設計器只允許“拋出異常”作為空值的預設行為。不幸的是,在數據庫中使用可為空的數據類型時,空值是合法值,但在嘗試從數據行中檢索此值時會引發異常。

我已經看過幾個關於這個問題的新聞組文章,但還沒有看到任何體面的解決這個問題的方法。

我很想听聽其他人是如何處理這個問題的。

謝謝。

DBNull 基本上是用來處理不可為空的值類型,在 .NET 2.0 之前。由於 ADO.NET 的設計,您無法避免 DBNull,除非您選擇更直接的方法。DBNull 是 ADO.NET 的內置核心,因此如果您想繼續使用它,就必須學會接受它。

如果您提供自己的數據傳輸對象而不是依賴通用 System.Data 命名空間,則可以檢查(在使用數據讀取器讀取結果時)該值是否為空,但您需要某種方法來生成強類型對象和映射,因為那是非常乏味的工作。

據我所知,DBNull 內置於 ADO.NET 的設計中,如果使用它,建構應用程序的最佳方法是將 DBNull 和 null 合併(規範化)。基本上,提供您自己的 DbConvert 類,該類攔截 DBNull 並在值為 DBNull 時返回實際的空引用。這是最低要求,但一旦完成,您將不必擔心浮動的 DBNull 值。

我認為 ASP.NET 論壇上的這篇文章將對以下問題有所幫助: Strongly-Typed DataSet/Nullable column issue

將此類屬性設置為 null 的唯一方法是使用數據集生成器也創建的輔助方法。這些方法以您的列名命名,因此在您的情況下,您應該在數據行對像上有名為 IsApprovingUserNull() 和 SetApprovingUserNull() 的方法。

引用自:https://stackoverflow.com/questions/879095