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

时间:2013-08-21 14:02:26

标签: 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转换为其他类型

我知道这是一个质量低劣的问题,但我不知道如何解决这个问题。

感谢您的时间和答案。

2 个答案:

答案 0 :(得分:5)

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

SQL - 将您的SUM换成ISNULL

SELECT ISNULL(SUM(payment), 0)

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

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

答案 1 :(得分:2)

object o = sc.ExecuteScalar();
con.Close();
if (o != null)
{
  int result = (int) o;
  if(result != 0)  Convert.ToDecimal(textBox20.Text = result .ToString().Replace(',', '.'));
}