• 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);
    }
  • 相关阅读:
    VSCode使用笔记
    python调用C++
    ubuntu下编译C++程序
    使用swig在python中调用C++
    VSCode调试data层时自身的一个bug
    MNN配置
    金融业务中的命名惯例
    Clang的线程安全分析静态工具
    gdb命名记录
    开发小结-产品类
  • 原文地址:https://www.cnblogs.com/xyyt/p/3203430.html
Copyright © 2020-2023  润新知