該功能用於插入一行到一個SQL數據庫,需要返回創建的標識號3704的操作是不允許的:VBScript和ADO - 當對象被關閉
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查詢時,它可以工作。任何人都可以幫忙?
謝謝Brian。你可以請建議在哪裏我應該把objRecordSet.NextRecordSet()?我嘗試了幾個地方,但它仍然是錯誤的,我相信你在正確的軌道上。 – VBscripter
好吧,弄清楚了,我不得不刪除objRecordset.MoveFirst並用Set objRecordSet2 = objRecordSet.NextRecordset()替換它,然後將返回行更改爲WriteDatabase = objRecordSet2(「ImageCopyID」)。我也必須刪除objRecordset.Close。由於我的複合語句中的第一條語句不返回任何行(它是一條INSERT語句),因此objRecordset會自動關閉並且不能再次關閉,從而生成錯誤。 – VBscripter
[有用的技巧在這裏](http://stackoverflow.com/a/35313932/692942)關於使用'NextRecordset'以及如何識別打開的記錄集。 – Lankymart