Monday, March 26, 2012

Microsoft OLE DB Provider for SQL Server error '80040e37'

I get Microsoft OLE DB Provider for SQL Server error '80040e37'

Invalid object name '#t_testTemp484883646'.
when I run the following ASP code:

Code is below

<!#Include File="../includes/adovbs.inc" -->

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
</HEAD>
<BODY>

<%
'-- Setup database connection
Set DataCmd = Server.CreateObject("ADODB.Connection")
Set rsData = Server.CreateObject("ADODB.RecordSet")
Dim varTempTableName
DataCmd.Open Application("DB")
'-- Use a Temp Table so that it gets destroyed automatically in case the page times out
'-- Use a Global Temp Table so that it is available across scopes when I open the record set below
'-- Append a semi unique number to the end because its global it could conflict with another browser running the same report
'varTempTableName = "##t_TestTemp" & Minute(Now()) & Second(Now())
varTempTableName = "#t_TestTemp" & Session.SessionID

strSQL = "Create Table " & varTempTableName & "(TestColumn2 int)"
DataCmd.Execute strSQL

strSQL = "select * from t_Test"
rsData.Open strSQL, DataCmd, adOpenForwardOnly,adLockReadOnly


Do While Not rsData.EOF
varTestColumn2 = rsData("TestColumn2")

'Error occurs when I place the following insert statement. Code works with the global variable

strSQL = "Insert into " & varTempTableName & " (TestColumn2) values (" & varTestColumn2 & ")"
DataCmd.Execute strSQL

rsData.MoveNext
Loop
rsData.Close

strSQL = "Drop Table " & varTempTableName
DataCmd.Execute strSQL

Set rsData = Nothing
Set DataCmd = Nothing
%>
</BODY>
</HTML>

If you have connection pooling enabled you will get *one* of the connection which *could* be actually not the same connection as this which created the temp table. So either use global temp tables (## instead of #) or disable connection pooling.

HTH, Jens K. Suessmeyer.

http://www.sqlserver2005.de

No comments:

Post a Comment