【发布时间】:2015-03-11 00:17:47
【问题描述】:
阅读了很多关于 null、DBNull 等的内容,感觉我明白了这些概念,但显然我没有。
我正在查询一个 SQL Server 数据库表,并且有一个允许为空的列。
我将查询结果放入数据集中,我可以清楚地看到相关行的值似乎是 NULL,但它在 DataSet Visualizer 中看起来只是“空白”。该列在相关行的 SQL Server 表中肯定是 NULL,而我的选择查询是直接选择语句(即我的 SQL 中没有使用 isnull 代码)。
我试图解决这个看似简单的问题,但我对空值的测试一直将值视为非空值。但是我的代码跳到 else 部分并尝试转换 pct cancelled 列中的值并不断给我一个错误 Convert.ToDouble
对象不能从 DBNull 转换为其他类型。
我尝试过使用_cancelledPct 列上的数据类型,但似乎没有任何帮助。我觉得我错过了一些非常明显的东西,但无法弄清楚为什么我 99.9999% 确定为 null 的这个值在我的 System.DBNull.Value 部分中没有进行评估(注意我也尝试过 dr["pct cancelled"] == null并得到了相似的结果)。
if (dr["pct cancelled"] != System.DBNull.Value)
this._cancelledPct = 0;
else
this._cancelledPct = Convert.ToDouble(dr["pct cancelled"]);
更新:
这是我的数据读取器和数据行的设置方式:
DataRow dr = dimCampaignSplitRow;
SqlCommand cmd = new SqlCommand();
cmd.Connection = _etlTask.Job.CrsConnection;
cmd.CommandTimeout = 1800;
SqlDataReader theDr = null;
SqlDataAdapter da = null;
【问题讨论】:
标签: c# sql-server null converter dbnull