1

我有这个SqlCommandSum all payments for client但问题是没有付款,结果为空或 0 - 我不确定。但我仍然收到同样的异常:Object cannot be cast from dbnull to other types

什么 Exception 或 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 转换为其他类型

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

感谢您的时间和回答。

4

2 回答 2

6

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

SQL - 将你的包装SUMISNULL

SELECT ISNULL(SUM(payment), 0)

转换 - 将其与DBNull.Value第一个比较:

var result = sc.ExecuteScalar();
int intResult = result == DBNull.Value ? 0 : Convert.ToInt32(result);
于 2013-08-21T14:07:18.953 回答
2
object o = sc.ExecuteScalar();
con.Close();
if (o != null)
{
  int result = (int) o;
  if(result != 0)  Convert.ToDecimal(textBox20.Text = result .ToString().Replace(',', '.'));
}
于 2013-08-21T14:05:52.370 回答