我正在移植一個經典的ASP站點。對於通過ODBC特定呼叫到SQL Server 2012,我使用下面的代碼:從傳統的ASP和ADO調用SQL Server不會保持斷開連接的記錄集
objRS.CursorLocation = adUseClient
objRS.Open strSQL, objConn, adOpenStatic, adLockBatchOptimistic
在SQL Server Management Studio中使用SQL Server Profiler,我可以看到呼叫正在取得和運行相同的查詢直接返回我的記錄。
我然後繼續下面的代碼:
Set objRS.ActiveConnection = Nothing
objConn.Close
set objConn = Nothing
Set GetRecordSet = objRS
set objRS = Nothing
其中GetRecordSet
是函數的名稱。
在調用頁面中,我將我的記錄集設置爲GetRecordSet
,我執行與if not RS.EOF then
崩潰檢查,並且查詢不能在關閉的記錄集上執行。它應該斷開連接,但由於某種原因它失敗了。
更新:有趣的是,傳遞失敗的SQL是存儲過程。如果我更改傳入的值爲select * from mytable
它可以工作。在數據庫方面,我用來通過ODBC連接的用戶具有對存儲過程的讀/寫和執行權限。
它是原始網站的現有代碼。我只是想盡可能多地移植代碼,直到完全重寫爲止 – bilpor
您的意思是「如果不是GetRecordSet.EOF」?,因爲我的代碼中沒有看到一個名爲「RS」的變量, objRS已關閉。除此之外,爲什麼不在使用它們後關閉記錄集和連接呢?無論如何,頁面完成後,它們都會被清理乾淨,如果需要,可以使用打開的連接發出更多查詢。 –
以上只是重要的片段。正如前面所說的,Windows Server 2003上的SQLServer 2005的所有工作都很好,它只能在Windows 2012上使用SQLServer 2012.我嘗試使用'objRs.Open strSQL,objConn,adOpenStatic,adLockReadOnly,adCmdText'打開記錄集並查看內容的objRS立即在捲土重來,它仍然在直接窗口中表示該物體已關閉。 – bilpor