C#z中关于存取数据库NULL和0的问题

需求: 注册用户的时候,对于年龄,地址,姓名等字段若是客户不想填写,这说明这些字段的值是“不知道”,数据库

可是,若是按照通常的观点,存入数据库的则是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

相关文章
相关标签/搜索