标签:
需求: 注册用户的时候,对于年龄,地址,姓名等字段如果客户不想填写,这说明这些字段的值是“不知道”,
但是,如果按照一般的观点,存入数据库的则是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 互操作使用 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 表示未初始化的变量或不存在的数据库列。
标签:
原文地址:http://my.oschina.net/qau/blog/510288