问题描述
if (
ds == null
|| ds.Tables == null
|| ds.Tables[0] == null
|| ds.Tables[0].Rows.Count <= 0
)
return null;
DaTarowView prd = ds.Tables[0].defaultview[0];
然后最后一行因以下错误而中断:
Type : system.indexOutOfRangeException,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
Message : Index 0 is either negative or above rows count.
Source : System.Data
Help link :
Data : System.Collections.ListDictionaryInternal
TargetSite : System.Data.DaTarow GetRow(Int32)
HResult : -2146233080
Stack Trace :
at System.Data.DataView.GetRow(Int32 index)
at System.Data.DataView.get_Item(Int32 recordindex)
鉴于我所做的评估,这怎么可能?我无法重现这个...
解决方法
这很奇怪:
ds.Tables[0].Rows.Count <= 0
我不记得曾经见过,也很难想象一个集合如何包含负数的项目..但无论如何
DataRowView prd = ds.Tables[0].DefaultView[0];
即使在您进行了所有检查之后,这仍然可能会爆炸,因为它需要视图中的第一行,即使表有行,这也可能不是问题(视图可能有一个过滤器,排除所有表格行的数量。也许你的意思是 ds.Tables[0].Rows[0];
?
您必须检查 DefaultView。它可能为 null 或为空