ExecuteScalar()返回错误“指定的强制转换无效”。什么时候没有记录

时间:2016-10-30 07:08:26

标签: c# ado.net

我使用下面的代码计算(总发票)每个客户,对于客户没有发票,它返回错误,我试图用null处理错误但它不起作用。

   public static decimal GetInvoiceTotal(int customerID)
    {
        SqlConnection connection = MMABooksDB.GetConnection();
        string selectStatement
            = "SELECT SUM(InvoiceTotal) "
            + "FROM Invoices "
            + "WHERE CustomerID = @CustomerID";
        SqlCommand selectCommand =
            new SqlCommand(selectStatement, connection);
        selectCommand.Parameters.AddWithValue("@CustomerID", customerID);




        try
        {
            connection.Open();

            if (selectCommand.ExecuteScalar()!=null)
            {
                decimal invoiceTotal = (decimal)selectCommand.ExecuteScalar();
                return invoiceTotal;
            }


            else
            {
                return 0;
            }
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        finally
        {
            connection.Close();
        }
    }

1 个答案:

答案 0 :(得分:2)

您不必两次致电ExecuteScalar

var value = selectCommand.ExecuteScalar();
if(value != DBNull.Value)
{
    return (decimal)value;
}

<强>更新

概括地说,DBNull类代表一个不存在的值。它与null不同,这意味着没有对象的引用。因此,当sql查询的结果为NULL时,ADO.NET(它用于访问数据库的技术)返回的值为DBNull

有关详细信息,请查看here