11

DataRow我正在尝试向C#中的现有列添加一列。之后,该列将填充我数据库中的单个值。

DataRow dr 已经存在,并且列“COLNAME”也存在。
comTBP 是我的SqlCommand.

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

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

4

3 回答 3

19

ExecuteScalarDBNull从空值返回querynull没有结果。也许在您的开发服务器上它从未发生过(null结果来自query)。

于 2011-10-28T09:27:46.933 回答
10

显然,在生产中,您要么NULL从命令执行返回,要么在连接字符串或其他任何东西中有所不同;作为一般规则,您应该始终测试 DBNull,然后再将ExecuteScalar.

在这里查看 Rein 的答案(并投票给他)以获得他很好的建议解决方案:

无法将“System.DBNull”类型的对象转换为“System.String”类型

于 2011-10-28T09:15:35.253 回答
2

在 SQL 中使用 ISNULL() 函数。

ISNULL(检查表达式,替换值)

IE...

从订单中选择 ISNULL(SUM(Price),0)

于 2014-09-25T11:51:03.590 回答