需求: 註冊用戶的時候,對於年齡,地址,姓名等字段若是客戶不想填寫,這說明這些字段的值是「不知道」,數據庫
可是,若是按照通常的觀點,存入數據庫的則是0,或者「 」空,這是不符合要求的,所以,須要存入數據庫的應該是null編程
此時,須要DbNull的用法c#
//存儲數據的時候這樣使用 //獲取控件輸入的字符 string name = txtName.Text; string age = txtAge.Text; string height = txtHeight.Text; //若是沒用戶沒有輸入姓名,則Text屬性爲空字符串 object objName; if(name.Length<=0) { objName = DBNull.Value;//DBNull.Value用來表示數據庫中的值 } else { objName = name; } object objAge; if(age.Length<=0) { objAge = DBNull.Value; } else { objAge = age; }
//讀取數據的時候這樣使用 DataRow row = table.Rows[0]; string name; if(row["Name"]==DBNull.Value) { name=null; } else { name = (string)row["Name"]; } int? age;//int age 不行,由於int不能夠爲null,加?號,表示一個可空的int類型 if(row["Age"]==DBNull.Value) { age = null; } else { age = (int)row["Age"]; } int Height = (int)row["Height"];
微軟MSDN的解釋以下:編程語言
DBNull 類表示一個不存在的值。 例如,在數據庫的表中,某一行的某列中可能不包含任何數據。 即,該列被視爲根本不存在,而不僅是沒有值。 一個表示不存在的列的 DBNull 對象。 此外,COM 互操做使用 DBNull 類來區分 VT_NULL 變量(指示不存在的值)和 VT_EMPTY 變量(指示未指定的值)。函數
DBNull 類型是一個單獨的類,這意味着只有一個 DBNull 對象存在。 DBNull.Value 成員表示單獨的 DBNull 對象。DBNull.Value 可用於將不存在的值顯式分配給數據庫字段,但大多數 ADO.NET 數據提供程序在字段沒有有效值時會自動分配 DBNull 值。 您能夠經過將從數據庫字段檢索到的值傳遞給 DBNull.Value.Equals 方法,肯定該字段值是否爲 DBNull 值。 然而,有些語言和數據庫對象提供一些方法,能夠更容易地肯定數據庫字段值是否爲DBNull.Value。 這些方法包括 Visual Basic 的 IsDBNull 函數、Convert.IsDBNull 方法、DataTableReader.IsDBNull 方法和 IDataRecord.IsDBNull 方法。spa
請勿將面向對象的編程語言中的 null 概念與 DBNull 對象混淆。 在面向對象的編程語言中,null 表示缺乏對象的引用。 DBNull 表示未初始化的變量或不存在的數據庫列。code