溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中DBNULL是什么

發(fā)布時間:2021-03-06 12:37:50 來源:億速云 閱讀:516 作者:小新 欄目:編程語言

這篇文章主要介紹了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,如果沒想出來,可以往下看,下圖標注處即為問題處。

C#中DBNULL是什么

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

2   內(nèi)容分享

2.1  在.NET中的,常用的基本數(shù)據(jù)類型

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

2.2  SqlServer中的常用數(shù)據(jù)類型

varchar,nvarchar,int,bit,decimal,datetime等,基本在與.net中的數(shù)據(jù)類型一一對應(varchar和nvarchar均對應.net中的string類型)

2.3  SqlServer中的常用數(shù)據(jù)類型的初始值

在.net中,當我們定義一個變量時,如果沒給其賦初始值,那么系統(tǒng)會默認初始值,如int 類型默認為0,string類型默認為string.Empty,一般情況,不同類型的默認初始值是不同的;但是,在SqlServer中,幾乎所有變量類型的初始值為NULL,也就要么為用戶自定義的值,要么為系統(tǒng)默認的值NUL。問題的關鍵就在這,以int類型為例,當在數(shù)據(jù)庫中,我們沒有給INT賦值時,其默認值為NULL,當把這個值賦給.net中的整形變量時,就會引發(fā)異常。

C#中DBNULL是什么

2.4  System.DBNull是什么?

DBNull是一個類,繼承Object,其實例為DBNull.Value,相當于數(shù)據(jù)中NULL值。

2.5  為什么 DBNull可以表示其他數(shù)據(jù)類型?

在數(shù)據(jù)庫中,數(shù)據(jù)存儲以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是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI