Recently I was working on a legacy VB Script file which has following code:
dim conn
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionTimeout = connTimeOut
conn.CommandTimeout = connCmdTimeOut
conn.Open connString
dim dbCmd
set dbCmd = CreateObject("ADODB.Command")
dbCmd.CommandTimeout = 300
dbCmd.CommandType = adCmdText
dbCmd.ActiveConnection = Conn
sqlText = "ReportScheduler '" & currentDate & "' "
dbCmd.CommandText = sqlText
dim rsScheduledReports
set GetScheduledReports = dbCmd.Execute
if not rsScheduledReports.EOF then
...
Each time when the code is executed to this line, an error is generated :
ADODB.Recordset: Operation is not allowed when the object is closed
This is strange as there are actually many records come from the database and this is proved by executing the sql in Management Studio mannually.
The VBScript code worked on SQL Server 2000, recently we upgraded to version 2005 then it breaks.
I spent a lot of time googling on the Internet and finally a trick fixed it. Just add this line to the beginning of the stored procedure: SET NOCOUNT ON.
This makes me thinking what's difference between SQL Server 2000 and 2005 version when adding set nocount on statement in a stored procedure. The behaviour must have changed for new version.
Wednesday, 14 January 2009
Subscribe to:
Posts (Atom)