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

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

但是,如果按照一般的观点,存入数据库的则是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 表示未初始化的变量或不存在的数据库列。


转载于:https://my.oschina.net/qau/blog/510288

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值