c# - 如何在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 转换为其他类型。
我怎么解决这个问题?
解决方案
标准方法是检查DBNull
:
var result = cmd2.ExecuteScalar();
return result == DBNull.Value ? default : (double)result;
有点麻烦,所以很多时候直接写会比较容易SELECT ISNULL(..., 0) ...
进一步的要点:
- 这仅适用于您获得实际
NULL
结果的情况。如果根本没有行,那么您需要检查null
而不是DBNull.Value
- 如果您确实有需要处理的空值,则上述代码也适用于
double?
- 显然,使用您注释掉的代码来正确使用参数,而不是您实际拥有的代码。请注意那
AddWithValue
是邪恶的,你应该指定实际的SqlDbType
,尽管int
它并不重要。 - 看起来您正在缓存连接对象。你不应该这样做。相反,当场创建它,并将其放置在一个
using
block中。
推荐阅读
- javascript - 如何使用 onclick 事件在 JavaScript 中调用函数
- c++ - 从回调函数更新 Cimg 图像和显示
- python - 如果我不将默认输入形状放入预训练模型中,深度学习程序的准确性会下降吗?
- javascript - 按下按钮时如何显示div的内容而不是值?
- ajax - 将对象数组中的数据发送到服务器
- java - 在 Java 中生成所有列表 n 层级的组合
- javascript - 如何从缩略图中删除不透明度
- amazon-web-services - 尝试将数据索引到 Amazon 弹性搜索中
- pandas - Pandas groupby 聚合与数据帧的差异,特别是在轴 = 1 上
- angular - 如何从 1 个角度库与另一个库进行通信?