ExecuteScalar返回null或DBNull(开发服务器或生产服务器)

本文关键字:服务器 开发 返回 null DBNull ExecuteScalar | 更新日期: 2023-09-27 18:12:51

我试图在c#中添加一列到现有的DataRow。之后,该列将使用来自数据库的单个值填充。

DataRow dr已经存在,列"COLNAME"也存在。
comTBP是我的SqlCommand

dr["COLNAME"] = Convert.ToInt32(comTBP.ExecuteScalar());

如果我的数据库中有一个值,并且ExecuteScalar()可以获得该值,那么这一切都可以正常工作。如果我在开发服务器(本地)上测试此代码,如果ExecuteScalar()返回null或DBNull并且新列的值为0,它也可以工作。但是,如果我将代码部署到生产服务器,问题就出现了。如果我做同样的事情,对于相同的数据库,它抛出一个异常,其中包含一条消息,它不能将DBNull转换为Int32。
我的问题是为什么这个错误出现在生产服务器上,而不是在我的本地开发服务器上?

ExecuteScalar返回null或DBNull(开发服务器或生产服务器)

如果querynull没有结果,则ExecuteScalar返回DBNull为空值。也许在您的开发服务器上,它从未发生过(nullquery结果)。

显然,在生产中,您有从命令执行返回的NULL或connectionstring或其他不同的东西;作为一般规则,在将ExecuteScalar的结果直接转换为另一种类型之前,您应该始终测试DBNull。

在这里查看Rein的答案(并投票给他),因为他提出了很好的解决方案:

无法强制类型为'System.DBNull'键入'System。字符串'

在SQL中使用ISNULL()函数

ISNULL (check_expression, replacement_value)

即…

选择ISNULL(和(价格),0)从订单