首页 > 解决方案 > 如何在c#中解决null

问题描述

我有一种方法可以在 a 中显示一个值TextBox

public double sumaEntregasDos(int id)
{
    conectar();
    //cmd2.CommandText = "SELECT SUM(pc.entrega) FROM PagosClientes pc INNER JOIN Clientes c ON pc.idCliente = c.idCliente WHERE c.nombre = @nombreCliente";
    //cmd2.Parameters.AddWithValue("@nombreCliente", nombre);

    cmd2.CommandText = "SELECT SUM(entrega) FROM PagosClientes WHERE idCliente in (" + 
        id + ")";

    double suma = Convert.ToDouble(cmd2.ExecuteScalar());
    desconectar();
    return suma;
}

当我按下按钮时,程序显示以下错误:

对象不能从 DBNull 转换为其他类型。

我怎么解决这个问题?

标签: c#sqlsql-server

解决方案


标准方法是检查DBNull

var result = cmd2.ExecuteScalar();
return result == DBNull.Value ? default : (double)result;

有点麻烦,所以很多时候直接写会比较容易SELECT ISNULL(..., 0) ...

进一步的要点:

  • 这仅适用于您获得实际NULL结果的情况。如果根本没有行,那么您需要检查null而不是DBNull.Value
  • 如果您确实有需要处理的空值,则上述代码也适用于double?
  • 显然,使用您注释掉的代码来正确使用参数,而不是您实际拥有的代码。请注意那AddWithValue是邪恶的,你应该指定实际的SqlDbType,尽管int它并不重要。
  • 看起来您正在缓存连接对象。你不应该这样做。相反,当场创建它,并将其放置在一个usingblock中。

推荐阅读