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。
我的问题是为什么这个错误出现在生产服务器上,而不是在我的本地开发服务器上?
如果query
和null
没有结果,则ExecuteScalar
返回DBNull
为空值。也许在您的开发服务器上,它从未发生过(null
从query
结果)。
显然,在生产中,您有从命令执行返回的NULL
或connectionstring或其他不同的东西;作为一般规则,在将ExecuteScalar
的结果直接转换为另一种类型之前,您应该始终测试DBNull。
在这里查看Rein的答案(并投票给他),因为他提出了很好的解决方案:
无法强制类型为'System.DBNull'键入'System。字符串'
在SQL中使用ISNULL()函数
ISNULL (check_expression, replacement_value)
即…
选择ISNULL(和(价格),0)从订单