我有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转换为其他类型
我知道这是一个质量低劣的问题,但我不知道如何解决这个问题。
感谢您的时间和答案。
答案 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(',', '.'));
}