一尘不染

DataTableReader对于当前DataTable'TempTable'无效

sql

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

“ DataTableReader对于当前DataTable’TempTable’无效。”

问题是,如果我重新启动计算机,则在不确定的时间内它可以正常工作,然后死于上面的情况。引发此错误的代码可以正常运行几个小时,然后:砰。您会收到此错误。它也不限于一行。它是使用DataTableReader的每个位置。另外,生产Web服务器上永远不会发生此错误。

这在一周的大部分时间里一直让我发疯,而且我在Google上找不到任何可以帮助的东西(因为我很肯定,这不是编码问题)。

一些技术信息:

DEV Box:Vista 32位(具有所有当前的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()之前查询了hasrows。所有这些工作。

我努力查看是什么原因导致的,因为没有代码错误-我100%肯定,因为它发布到Web服务器时运行良好。


阅读 193

收藏
2021-03-10

共1个答案

一尘不染

我认为使用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();

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

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

DataTableReader.HasRows属性

2021-03-10