首頁  >  文章  >  後端開發  >  C#中關於DBNULL的解釋

C#中關於DBNULL的解釋

黄舟
黄舟原創
2017-10-05 15:30:372042瀏覽

1   概述

如下例子,你覺得有什麼問題? 如你能很快的找出問題,並且解決它,那麼你可以跳過本篇文章,謝謝~~。

1 List<Base_Employee> ltPI = new List<Base_Employee>();
2 DataTable dt = GetBase_UserInfoToDataTable();
3 for (int i = 0; i < dt.Rows.Count; i++)
4    {
5          Base_Employee base_Employee= new Base_Employee();
6          base_Employee.EmployeeId= dt.Rows[i]["EmployeeId"].ToString();//EmployeeId为string类型
7          base_Employee.Age =(int)dt.Rows[i]["Age"];//Age为int类型
8          base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"];//GraduationDate 为DateTime类型
9    }

想一分鐘,OK,如果沒想出來,可以往下看,下圖示註處即為問題處。

 ok,這篇文章就是來解決這個問題的。也就是接下來要與大家分享的System.DBNULL型別

2   內容分享

2.1  在.NET中的,常用的基本資料類型

int,string,char等是大家比較熟悉的基本資料類型,但是大部分人都應該對System.DBNull比較陌生,然而,它又是解決如上問題的一大思路。

2.2  SqlServer中的常用資料型別

varchar,nvarchar,int,bit,decimal,datetime等,基本上與.net中的資料型別一一對應(varchar與nvarchar皆對應.net中的string型別)

#2.3  SqlServer中的常用資料型別的初始值

在.net中,當我們定義一個變數時,如果沒給其賦初始值,那麼系統會預設初始值,如int 類型預設為0,string類型預設為string.Empty,一般情況,不同型別的預設初始值是不同的;但是,在SqlServer中,幾乎所有變數類型的初始值為NULL,也就就不是為使用者自訂的值,就是為系統預設的值NUL。問題的關鍵就在這,以int型別為例,當在資料庫中,我們沒有給INT賦值時,其預設值為NULL,當把這個值賦給.net中的整形變數時,就會引發異常。

 

2.4  System.DBNull是什麼?

DBNull是個類,繼承Object,其實例為DBNull.Value,相當於資料中NULL值。

2.5  為什麼 DBNull可以表示其他資料型別?

在資料庫中,資料儲存以object來儲存的。 2.6 如何解決如上問題

加上條件判斷


#####可以用string型別是否為空,或DBNull是否等於NULL來判斷###############
 1 List<Base_Employee> ltPI = new List<Base_Employee>(); 
 2 DataTable dt = GetBase_UserInfoToDataTable(); 
 3 for (int i = 0; i < dt.Rows.Count; i++) 
 4    { 
 5          Base_Employee base_Employee= new Base_Employee(); 
 6          base_Employee.EmployeeId= dt.Rows[i]["EmployeeId"].ToString();//EmployeeId为string类型 
 7          //base_Employee.Age =(int)dt.Rows[i]["Age"];//Age为int类型 
 8           if (dt.Rows[i]["Age"]!=System.DBNull.Value) 
 9                 {
 10                     base_Employee.Age = int.Parse(dt.Rows[i]["Age"].ToString());
 11                     //base_Employee.Age = (int)dt.Rows[i]["Age"];//拆箱
 12                     //base_Employee.Age =Convert.ToInt16( dt.Rows[i]["Age"]);
 13                 }
 14          //base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"];//GraduationDate 为DateTime类型
 15         if (dt.Rows[i]["GraduationDate"].ToString()!="")
 16                 {
 17                     base_Employee.GraduationDate = Convert.ToDateTime(dt.Rows[i]["GraduationDate"]);
 18                     base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"];
 19                 }
 20    }

以上是C#中關於DBNULL的解釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn