[轉貼] 使用TableAdapter時,遇到資料欄位為Null處理方式

2018070810:55
出處:http://www.dotblogs.com.tw/jaigi/archive/2013/06/30/106396.aspx


最近遇到使用TableAdapter進行資料讀取的系統,一般來說透過這樣方式去查詢資料並無太問題。但是,由於
資料是其他單位負責,於是透過Linq去讀取時,卻發生下面問題:
The value for column \'VXXXXX\' in table \'Adapter\' is DBNull.

主要原因是因為讀取此資料集時,裡面有某個欄位的資料是NULL,非空白,因此,造成資料Query出現異常。
大致語法如下:
1 using(XXX.XXTableAdapter tt=new XXX.XXTableAdapte())
2 {
3    var SS=from a in tt.GetData().AsEmunable()
4                select new { A1=a.A1, B2=a.B2  }
5    Foreach(var g in SS)
6   {
7      Console.write(g.A1);  
8    }
9 }

且同時我們也不想讓有Nuu的資料,因此,會在加入Where條件,但是,加入Where條件等於NULL或是等於空白似乎無效。
依舊會出現Excelption。此時,就可以作法就是我們可以在資料集 (*.xsd)檔案中,去修改欄位的屬性。
1.首先找到我們的資料表以及會產生NULL資料的欄位,這邊以Month欄位為例
image
2.針對此欄位屬性去做設定。
image
這邊要修改地方有兩個,第一個是將AllowDBNull設定為True,另外,要設定NullValue時回傳值,原來預設是Exception,
所以,當查詢資料遇到欄位有NULL就會出錯,因此,我們這邊可以設定為Empty。當這樣設定好,之後再去將Linq語法做修正
3.修正Linq語法,在語法中加入Where條件,濾掉Month是Empty的就可以。
view source

print?
01 using(XXX.XXTableAdapter tt=new XXX.XXTableAdapte())
02 {
03    var SS=from a in tt.GetData().AsEmunable()
04                where a.month !=string.empty
05                select new { A1=a.A1, B2=a.B2  }
06    Foreach(var g in SS)
07   {
08      Console.write(g.A1);  
09    }
10 }

以上就可以順利的查詢資料了。