尝试从 ExecuteScalar() 获取值时抛出异常

2024-06-01

在下面的代码中,语句 1 抛出强制转换异常。我想知道为什么不拆箱?
语句2工作正常,但我想知道为什么第一个是错误的?

using (IDbCommand command = connection.CreateCommand())
{
    command.CommandText = string.Format("SELECT COUNT(1) FROM {0}", tableName);
    int count = (int)command.ExecuteScalar(); //statement 1
}
//int count = Convert.ToInt32(command.ExecuteScalar()); //statement 2

唉,执行标量返回一个 long/int64,当你编写 SQL 命令时,你知道返回值将是一个计算出的整数(SELECT COUNT(...,也 SELECT MAX(...

忽略其他建议,你所需要的只是演员阵容。 (不,这些命令永远不会返回字符串,即“42”)

int count = (int)(long)command.ExecuteScalar();

或者如果担心大量

long count = (long)command.ExecuteScalar();

除非,由于某些奇怪的原因,您无法控制正在执行的 SQL 语句,为什么使用转换或装箱/拆箱会使问题变得复杂。 好的 greif 人,K.I.S.S.,放下代码膨胀,......然后回答问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试从 ExecuteScalar() 获取值时抛出异常 的相关文章

随机推荐