DBNull.Value 与null

来源:http://blog.csdn.net/beautifulsarah/article/details/54691670

DBNull.Value,, 适用于向数据库的表中插入空值。而 null,是指在程序中表示空引用。 或者对象为空。就是没有实例化。

row[column]的值为DBNull.Value的话,至少说明它是从数据库中取到值了,对应了数据库中的空值;但如果row[column]的值为null的话,说明没有从数据库中取到值。DBNull.Value是一个有着内存地址的具体类型的值,映射了数据库中的null值;而NULL则是空指向,不存在对应的内存地址。任何对象赋值为null后,内存就释放了。

 

转换方法:

heper类中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/// <summary>
/// 将null转换为DBNull.Value
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public object ToDbValue(object value)
{
    if (value == null)
    {
        return DBNull.Value;
    }
    else
    {
        return value;
    }
}
/// <summary>
/// 将DBNull.Value转换为null
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public object FromDbValue(object value)
{
    if (value == DBNull.Value)
    {
        return null;
    }
    else
    {
        return value;
    }
}  

 

应用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public List<DateJg> GetList(int ncpid, DateTime start, DateTime end)
{
    var list = new List<DateJg>();
    string sql = @"select *  from v_yjdatealljg where yjxzqid=9 and ncpid =@ncpid and cjrq>=@start and cjrq<=@end  order by cjrq,yjxzqid,ncpid";
    var sqlparms = new SqlParameter[] {
        new SqlParameter("@ncpid",ncpid),
        new SqlParameter("@start",start.Date),
        new SqlParameter("@end",end.Date)
    };
    var table = helper.ExecuteDataTable(sql, sqlparms);
 
    using (System.Data.IDataReader dataReader = table.CreateDataReader())
    {
        while (dataReader.Read())
        {
            list.Add(GetInfo(dataReader));
        }
    }
    return list;
}
private DateJg GetInfo(IDataReader reader)
{
    var info = new DateJg();
    info.lsjg = (decimal?)helper.FromDbValue(reader["lsjg"]);
    info.ncpid = (int)helper.FromDbValue(reader["ncpid"]);
    info.ncpmc = (string)helper.FromDbValue(reader["ncpmc"]);
    info.pfjg = (decimal?)helper.FromDbValue(reader["pfjg"]);
    info.rq = (DateTime)helper.FromDbValue(reader["cjrq"]);
    info.ttjg = (decimal?)helper.FromDbValue(reader["ttjg"]);
    info.yjxzqid = (int)helper.FromDbValue(reader["yjxzqid"]);
    info.yjxzqname = (string)helper.FromDbValue(reader["yjxzqname"]);
    return info;
}

  

 

posted @   hao_1234_1234  阅读(593)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2016-11-15 注释符、快捷键、变量及其命名规则
2016-11-15 未实现该方法或操作 总结
点击右上角即可分享
微信分享提示