[C#]關於DBNULL的解釋


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    }

3   版權

 

  • 感謝您的閱讀,若有不足之處,歡迎指教,共同學習、共同進步。
  • 博主網址:http://www.cnblogs.com/wangjiming/。
  • 極少部分文章利用讀書、參考、引用、抄襲、復制和粘貼等多種方式整合而成的,大部分為原創。
  • 如您喜歡,麻煩推薦一下;如您有新想法,歡迎提出,郵箱:2016177728@qq.com。
  • 可以轉載該博客,但必須著名博客來源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM