標籤:
需求: 註冊使用者的時候,對於年齡,地址,姓名等欄位如果客戶不想填寫,這說明這些欄位的值是“不知道”,
但是,如果按照一般的觀點,存入資料庫的則是0,或者“ ”空,這是不符合要求的,因此,需要存入資料庫的應該是null
此時,需要DbNull的用法
//儲存資料的時候這樣使用//擷取控制項輸入的字元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 Interop使用 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 方法。
請勿將物件導向的程式設計語言中的 null 概念與 DBNull 對象混淆。 在物件導向的程式設計語言中,null 表示缺少對象的引用。 DBNull 表示未初始化的變數或不存在的資料庫列。
C#z中關於存取資料庫NULL和0的問題