2017-09-14 65 views
1

我正在移植一個經典的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連接的用戶具有對存儲過程的讀/寫和執行權限。

+0

它是原始網站的現有代碼。我只是想盡可能多地移植代碼,直到完全重寫爲止 – bilpor

+0

您的意思是「如果不是GetRecordSet.EOF」?,因爲我的代碼中沒有看到一個名爲「RS」的變量, objRS已關閉。除此之外,爲什麼不在使用它們後關閉記錄集和連接呢?無論如何,頁面完成後,它們都會被清理乾淨,如果需要,可以使用打開的連接發出更多查詢。 –

+0

以上只是重要的片段。正如前面所說的,Windows Server 2003上的SQLServer 2005的所有工作都很好,它只能在Windows 2012上使用SQLServer 2012.我嘗試使用'objRs.Open strSQL,objConn,adOpenStatic,adLockReadOnly,adCmdText'打開記錄集並查看內容的objRS立即在捲土重來,它仍然在直接窗口中表示該物體已關閉。 – bilpor

回答

0

以日期爲中心的錯誤。在SP中,我將dateformat設置爲DMY。 DB語言設置爲英式英語。在ODBC連接中,SQLSErver消息的語言也設置爲英式英語。我沒有設置的是ODBC驅動程序中的Use regional settings when outputting currency,numbers, dates and times,所以當使用結果集返回時,它將恢復爲默認設置,因此不能正確映射日期時間並殺死結果集。

相關問題