zoukankan      html  css  js  c++  java
  • Sql求和异常——对象不能从 DBNull 转换为其他类型

    做项目遇到一个以前没遇到的问题,就是要计算一个用户消费总额,

    关键代码如下:

    string sql = "select sum(Tmoney) from [order] where uid=@uid";
    SqlParameter[] paras ={
                              new SqlParameter("@uid",uid)
                          };
    object result = this.ExecuteScalar(sql, CommandType.Text, paras);
    if (result==null)
    {
        return 0;
    }
    else
    {
        return Convert.ToDecimal(result);
    }

    运行结果报错如下:

    解析:

    但是代码中已经对获取的值进行了判断,result==null的时候就返回0,不在将result转换为int类型,

    但是出现的错误信息是"对象不能从 DBNull 转换为其他类型",调试的时候也会发现,并没有经过result==null,

    而是直接跳过,那就说明了如果查询的结果为空的话,数据类型不是Object类型的null值,而是DBNull类型了。

    查询资料,发现要对result==DBNull.Value进行判断才可以。

    正确代码如下:

    string sql = "select sum(Tmoney) from [order] where uid=@uid";
    SqlParameter[] paras ={
                              new SqlParameter("@uid",uid)
                          };
    object result = this.ExecuteScalar(sql, CommandType.Text, paras);
    if (result==DBNull.Value)
    {
        return 0;
    }
    else
    {
        return Convert.ToDecimal(result);
    }
  • 相关阅读:
    boost::asio::error的用法浅析
    boost::asio::buffer
    sqlserver2008安装图解
    WCF 聊天室程序代码详细讲解教程
    C#中使用Property Grid(属性面板)控件
    TXT>Access 使用DAO数据源!(VB Code)
    读取INI文件 VbCode
    Pet Shop 4
    模式行为型
    C#编程规范
  • 原文地址:https://www.cnblogs.com/xyyt/p/3203430.html
Copyright © 2011-2022 走看看