我有一个由存储过程返回的数据集,其中一个项可能为null.我正在尝试将数据集中的每一行转换为强类型对象,但我似乎无法正确转换空值.
我创建了一个模拟我的场景如下:
DataSet ds = new DataSet(); ds.Tables.Add(new DataTable()); ds.Tables[0].Columns.Add("Name", typeof(string)); ds.Tables[0].Columns.Add("Amount", typeof(decimal)); ds.Tables[0].Rows.Add("My Name Here", null); //create row with a null item DataRow dataRow = ds.Tables[0].Rows[0]; Person p = new Person { Name = (string)dataRow["Name"], Amount = (decimal)dataRow["Amount"] }
不幸的是我得到以下异常: System.InvalidCastException: Specified cast is not valid.
如果我尝试使用可空类型(十进制?),我会收到此错误: System.NotSupportedException: DataSet does not support System.Nullable<>.
在调试器中,我对dataRow ["Amount"]中的值进行了以下测试:
dataRow["Amount"] is decimal (false) dataRow["Amount"] is decimal? (false) dataRow["Amount"] == null (false) dataRow["Amount"] is object (true)
我所能确定的只是它是某种对象......这不是特别有用.
你们有谁能发现我做错了什么?
你可以使用dataRow.IsNull("Amount")
或Convert.IsDBNull(dataRow["Amount"])
或(dataRow["Amount"] as Decimal) != null
.