每当我的代码从有效的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服务器时运行良好。
我认为使用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属性