У меня есть клиент, у которого приложение Classic ASP генерирует ошибки ASP_0147. Первое, что я проверяю, это то, что они закрывают и освобождают ресурсы SQL / ADO вовремя.
Их код имеет следующий шаблон:
Function GetXXXXRecordSet()
Set objConn = Server.CreateObject("ADODB.Connection")
With objConn
.CursorLocation = 3 ''adUseServer (default)
.ConnectionString = strConnectionString
.Open
End With
Set objCmd = Server.CreateObject("ADODB.Command")
Set objCmd.ActiveConnection = objConn
'' Build command object to call SQL stored proc, snipped for brevity
Set objRs = Server.CreateObject("ADODB.RecordSet")
objRs.Open objCmd, ,3,4 '' Cursor=adOpenStatic, Locktype=adLockBatchOptimistic
'' Return Recordset
Set GetXXXXRecordSet = objRs
If Not objCmd Is Nothing Then
objCmd.ActiveConnection = Nothing '' Should this use a Set statement?
Set objCmd = Nothing
End If
If Not ObjRs Is Nothing The Set objRs = Nothing
End Function
Устанавливает ли ActiveConnection команды ADO = Ничто не закрывает базовое SQL-соединение или это должно быть явно закрыто?
Также должна быть строка:
objCmd.ActiveConnection = Nothing
быть:
Set objCmd.ActiveConnection = Nothing
Как ни странно, первая версия не выдает ошибку, поэтому я и спрашиваю.
Прошло так много времени с тех пор, как я смотрел на ADO, и мои знания немного ржавые.