VBscript и ADO - 3704 Операция не разрешена, когда объект закрыт - PullRequest
4 голосов
/ 11 ноября 2009

Эта функция вставляет строку в базу данных SQL и должна вернуть созданный идентификационный номер:

Function WriteDatabase(backupTypeID, numImages, folderSize, success, errorMessage, strLogFileName)

    On Error Resume Next
    err.clear
    Set objConnection = CreateObject("ADODB.Connection")
    Set objRecordSet = CreateObject("ADODB.Recordset")
    objConnection.Open "Provider=SQLOLEDB;Data Source=x.x.x.x;Initial Catalog=DB;User ID=sa;Password=xxxxxx"
    sqlquery = "INSERT INTO tblImageCopies (BackupCopyDate, BackupCopyTypeID, NumImages, ImagesFolderSize, Success, ErrorMessage) VALUES (GETDATE(), " & backupTypeID & ", " & numImages & ", " & folderSize & ", " & success & ", " & errorMessage & "); SELECT scope_identity() AS ImageCopyID;" 
    objRecordSet.Open sqlquery,objConnection
    objRecordSet.MoveFirst
    WriteDatabase = objRecordSet("ImageCopyID")
    objRecordSet.Close
    objConnection.Close
    If err.number <> 0 Then
        WriteLog "Error writing to the EHN database - " & err.number & " " & err.description, strLogFileName
    End If

End Function

Он успешно вставляет строку, но я получаю сообщение об ошибке «3704 Операция не разрешена, когда объект закрыт». когда он пытается вернуть идентификационный номер в наборе записей. Когда я выполняю этот SQL-запрос непосредственно на сервере, он работает. Кто-нибудь может помочь?

Ответы [ 3 ]

6 голосов
/ 04 ноября 2010

Используйте «SET NOCOUNT ON;» в начале вашего запроса

6 голосов
/ 11 ноября 2009

Я делаю то же самое (очень похоже). Я считаю, что возвращаются два набора результатов: один для INSERT, а другой для SELECT. Попробуйте вызвать objRecordSet.NextRecordset ().

1 голос
/ 18 июня 2013

Я получил точную ошибку и смог отследить ее до оператора PRINT, который я оставил в своей хранимой процедуре SQL Server. Как только я прокомментировал оператор PRINT, набор записей вернул результаты без ошибок.

...