c# - SqlCommand结果-无法将对象从dbnull强制转换为其他类型

标签 c# sql sql-server winforms

我有这个SqlCommand那个Sum all payments for client,但是问题是没有付款的结果是null或0-我不确定。但是我仍然收到相同的异常:无法将对象从dbnull强制转换为其他类型

什么异常或if语句可以解决?

 private void select_payments()
    {

        try
        {

            SqlCommand sc = new SqlCommand("SELECT SUM(payment) AS sumpayment FROM clientpayments WHERE subkey='" + selectid + "' AND year='" + selectedyear+ "'", con);

            con.Open();
            int result = Convert.ToInt32(sc.ExecuteScalar());
            con.Close();

            if (result != 0)
            {
                Convert.ToDecimal(textBox20.Text = result .ToString().Replace(',', '.'));
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show(" " + ex.Message.ToString());

        }
    }


我仍然收到此异常:


  无法将对象从dbnull强制转换为其他类型


我知道这是低质量的问题,但是我不确定该如何解决。

感谢您的时间和答复。

最佳答案

您有两个选择。修复您的SQL语句或转换。

SQL-将SUM包裹在ISNULL中:

SELECT ISNULL(SUM(payment), 0)


转换-首先将其与DBNull.Value进行比较:

var result = sc.ExecuteScalar();
int intResult = result == DBNull.Value ? 0 : Convert.ToInt32(result);

关于c# - SqlCommand结果-无法将对象从dbnull强制转换为其他类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18359571/

相关文章:

C# XSLT 转换内存不足

c# - 将 for 循环与 if 和 else 结合使用

mysql - 为什么Mysql时间输出值显示为hhmmss而不是hh :mm:ss?

sql - 如果 select 返回 null,则使用默认值插入

c# - GetAsync azure 调用没有结果

c# - 在 Windows 10 中使用 CommonOpenFileDialog 选择文件夹但仍显示文件夹内的文件

java - 如何在 hibernate 中创建具有多个条件的内部连接

php - 用于可扩展性的宾果游戏数据库表示

sql - 如何获取不不同的值(计数 > 1)

sql-server - SQLite 与 SQL Server