VB.NET运行时TempTable无数据但原DataTable有数据如何解决
错误原因排查
- 运行时
RatesDataSet.HTS未实际填充数据。设计器预览时的数据集和运行时使用的数据集是两个独立实例,若运行时没有调用对应TableAdapter的Fill方法加载数据,运行时的表自然为空。你可以在TempTable = RatesDataSet.HTS行打断点,查看RatesDataSet.HTS.Rows.Count的数值,确认这一步原表是否有数据。 - 排序列名错误被异常捕获逻辑吞掉。你代码中排序使用的列名
HTS Code NA如果和实际列名不一致,执行DV.Sort时会抛出异常,若你上层代码有吞异常的逻辑,会直接跳出当前方法,导致你误以为是TempTable为空才没进入循环。 - DefaultView被设置了过滤条件。如果之前的代码给
RatesDataSet.HTS.DefaultView设置过RowFilter或者RowStateFilter,会导致符合条件的行数量为0,DV.ToTable生成的表自然无数据。
优化后的代码
Public Sub HTSCode() ' 先确认原表有数据 If RatesDataSet.HTS.Rows.Count = 0 Then ' 这里补充填充数据集的逻辑,比如对应的TableAdapter.Fill(RatesDataSet.HTS) Exit Sub End If ' 直接复制原表数据,避免引用原表的视图设置 Dim TempTable As DataTable = RatesDataSet.HTS.Copy() ' 先校验列存在再排序,避免列名写错的问题 If Not TempTable.Columns.Contains("HTS Code NA") Then Throw New Exception("指定的排序列不存在") End If Dim DV As DataView = TempTable.DefaultView DV.Sort = "HTS Code NA" TempTable = DV.ToTable() For Each Row As DataRow In TempTable.Rows ' 执行业务逻辑 Next End Sub
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

