C#中關於DBNULL的解釋

來源:互聯網
上載者:User
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中的,常用的基礎資料型別 (Elementary Data Type)

int,string,char等是大家比較熟悉的基礎資料型別 (Elementary Data Type),但是大部分人都應該對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    }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.