我从Stored Procedure
获取一些数据到DataSet
,然后将该数据复制到List
。数据中有一些NULL
值,我可以使用DBNULL.Value
进行检查。但是无论什么时候出现NULL值,它都会给我错误
错误:指定的演员表无效。
这是我的班级定义。
public class CustomClass
{
public int Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public int ZoneId { get; set; }
public string ShortName { get; set; }
public int CityId { get; set; }
public int ExpCenId { get; set; }
public int CategoryId { get; set; }
public double Charges { get; set; }
}
这就是我将数据从DataSet复制到List的方式。
objResult.lst.Add(new CustomClass()
{
Code = dsLogin.Data[I]["Code"].ToString(),
Id = (int)dsLogin.Data[I]["Id"],
Name = dsLogin.Data[I]["Name"].ToString(),
ShortName = dsLogin.Data[I]["ShortName"].ToString(),
ZoneId = (int)dsLogin.Data[I]["ZoneId"],
CityId = (int)(dsLogin.Data[I]["CityId"] == DBNull.Value ? 0 : dsLogin.Data[I]["CityId"]),
ExpCenId = (int)(dsLogin.Data[I]["ExpCenId"] == DBNull.Value ? 0 : dsLogin.Data[I]["ExpCenId"]),
CategoryId = (int)(dsLogin.Data[I]["CategoryId"] == DBNull.Value ? 0 : dsLogin.Data[I]["CategoryId"]),
Charges = (double)(dsLogin.Data[I]["Charges"] == DBNull.Value ? 0.0 : dsLogin.Data[I]["Charges"])
});
如果是NULL
,当我在即时窗口中检查dsLogin.Data[I]["CityId"]
时,它会显示 {} ,当我检查时
(int)(dsLogin.Data[I]["CityId"] == DBNull.Value ? 0 : dsLogin.Data[I]["CityId"])
它显示 0 但是当我尝试在 CityId 中复制它时,它会抛出异常。
我被困在这里并且不知道我做错了什么。任何形式的帮助将不胜感激。
答案 0 :(得分:0)
尝试使用IsCityIdNull()
代替DBNull
。 DataSet为所有字段生成自动空函数。
或者
尝试Convert.ToInt32
而不是(int)。