DataTableReader.NextResult()导致HasRows()的错误结果

时间:2013-12-02 15:05:29

标签: c# ado.net

我有一个用于基于SqlDataReader创建文件的通用exe。此阅读器中可能有多个记录集。还有一些扩展的库可以添加以运行更复杂的数据查询,但会返回一个SqlDataReader。我最近不得不改变,因为运行SqlDataReader的扩展库不能再写入SQL来从多个数据源构建它的表。所以现在这些库创建了一个内部DataTableReader,它可以有一个或多个记录集,目前只有一个。

我的问题是,我发现一旦切换到我的通用EXE中的DataTableReaders,当我调用.NextResult()来获取下一个记录集时,然后调用if(reader.HasRows())来验证记录集是否存在,即使只有一个记录集,它也总是返回true。

在创建DataTableReader以确保HasRows返回正确的结果时,我是否需要做些什么?

我在创建DataTableReader时尝试了两种不同的方法。

1: dataTable.CreateDataReader();
2: new DataTableReader(new DataTable[] { dataTable });

在调用.NextResult()方法后,两种情况仍然在HasRows上返回true。

2 个答案:

答案 0 :(得分:1)

不要使用“HasRows”来检查下一个记录集是否存在。验证实际调用DataTableReader.NextResult()返回的内容。如果它为False则不存在下一个记录集。

在MSDN文档中查看basic sample

答案 1 :(得分:0)

对我来说,HasRows返回true是正常的,因为你的表中实际上有一条记录。如果你想知道你的阅读器中是否有更多的记录,你应该把你的阅读代码放在while (yourReader.read())中,然后你在while循环中阅读代码