Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DataTableReader is invalid for current DataTable 'TempTable' [closed]

I'm getting the following error whenever my code creates a DataTableReader from a valid DataTable Object:

"DataTableReader is invalid for current DataTable 'TempTable'."

The thing is, if I reboot my machine, it works fine for an undetermined amount of time, then dies with the above. The code that throws this error could have been working fine for hours and then: bang. you get this error. It's not limited to one line either; it's every single location that a DataTableReader is used. Also, this error does NOT occur on the production web server - ever.

This has been driving me nuts for the best part of a week, and I've failed to find anything on Google that could help (as I'm pretty positive this isn't a coding issue).

Some technical info:

DEV Box: Vista 32bit (with all current windows updates) Visual Studio 2008 v9.0.30729.1 SP dotNet Framework 3.5 SP1

SQL Server: Microsoft SQL Server 2005 Standard Edition- 9.00.4035.00 (X64) Windows 2003 64bit (with all current windows updates)

Web Server: Windows 2003 64bit (with all current windows updates)

Any help, ideas, or advice would be greatly appreciated!

UPDATE 1:

Ok - Have tried the following now with no success:

1: Rebooted 2: SFC / ScanNow 3: Changed SQL Servers 4: Tried a different method that uses DataTableReaders 5: Cleaned solution

The only thing I did find that worked was copy & pasting the code from the main Visual studio instance, into another which had a simple console app. This then worked as expected (queried database and got results into a dataTable, created a datatablereader on that table, then queried hasrows before calling .Read()... All of which worked.

I am struggling to see what could cause this, as there are NO code faults - i'm 100% certain, as it runs perfectly when published to the webserver.

like image 447
Sk93 Avatar asked Mar 15 '10 09:03

Sk93


2 Answers

Wrap usage of DataTableReader (and all IDisposables) with using.

like image 81
Andrew Bezzub Avatar answered Sep 24 '22 23:09

Andrew Bezzub


I think using the while(reader.read()) may solve your problem.

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();

UPDATE: Also from msdn: The HasRows property returns information about the current result set. If the DataTableReader contains multiple result sets, you can examine the value of the HasRows property immediately after you call the NextResult method in order to determine whether the new result set contains rows.

Use the HasRows property to avoid the requirement to call the Read method of the DataTableReader if there are no rows within the current result set.

DataTableReader.HasRows Property

like image 22
DotNetWala Avatar answered Sep 23 '22 23:09

DotNetWala