当前位置:  开发笔记 > 编程语言 > 正文

如果DataSet中的项可能为null,我如何正确地转换它?

如何解决《如果DataSet中的项可能为null,我如何正确地转换它?》经验,为你挑选了1个好方法。

我有一个由存储过程返回的数据集,其中一个项可能为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)

我所能确定的只是它是某种对象......这不是特别有用.

你们有谁能发现我做错了什么?



1> hvintus..:

你可以使用dataRow.IsNull("Amount")Convert.IsDBNull(dataRow["Amount"])(dataRow["Amount"] as Decimal) != null.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有