DataTableReader对当前DataTable"TempTable"无效

Sk9*_*k93 8 c# sql exception visual-studio-2008

每当我的代码从有效的DataTable对象创建DataTableReader时,我都会收到以下错误:

"DataTableReader对当前的DataTable'TempTable'无效."

问题是,如果我重新启动我的机器,它可以在不确定的时间内正常工作,然后用上述方法消失.抛出此错误的代码可能已经工作好几个小时然后:爆炸.你得到这个错误.它不仅限于一行; 它是使用DataTableReader的每个位置.此外,生产Web服务器上不会发生此错误.

这让我疯狂了一周的最佳时间,而且我没有在Google上找到任何可能有用的东西(因为我非常肯定这不是编码问题).

一些技术信息:

DEV Box:Vista 32bit(所有当前Windows更新)Visual Studio 2008 v9.0.30729.1 SP dotNet Framework 3.5 SP1

SQL Server:Microsoft SQL Server 2005标准版 - 9.00.4035.00(X64)Windows 2003 64位(包含所有当前Windows更新)

Web服务器:Windows 2003 64位(包含所有当前Windows更新)

任何帮助,想法或建议将不胜感激!

更新1:

好的 - 现在尝试了以下但没有成功:

1:重新启动2:SFC/ScanNow 3:更改SQL Server 4:尝试使用DataTableReaders的其他方法5:清除解决方案

我发现唯一有效的方法是将Visual Studio实例中的代码复制并粘贴到另一个具有简单控制台应用程序的代码中.然后按预期工作(查询数据库并将结果放入dataTable,在该表上创建一个datatablereader,然后在调用.Read()之前查询hasrow ...所有这些都有效.

我正在努力寻找可能导致这种情况的原因,因为没有代码错误 - 我100%肯定,因为它在发布到网络服务器时运行得很好.

Dot*_*ala 7

我认为使用while(reader.read())可以解决您的问题.

if (myReader.HasRows)
   while (myReader.Read())
     Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));
else
   Console.WriteLine("No rows returned.");
myReader.Close();
Run Code Online (Sandbox Code Playgroud)

更新: 同样来自msdn:HasRows属性返回有关当前结果集的信息.如果DataTableReader包含多个结果集,则可以在调用NextResult方法后立即检查HasRows属性的值,以确定新结果集是否包含行.

如果当前结果集中没有行,则使用HasRows属性可以避免要求调用DataTableReader的Read方法.

DataTableReader.HasRows属性


Ray*_*boe 6

有同样的问题并在清除观察窗口中的变量后摆脱了它。