為什麼在預存過程中用OLEDB方式不能回傳記錄集?
我曾寫過一段程序,是對臨時表操作的(主要功能是取出每種分類的TOP10筆記錄)。
此預存程序使用ODBC連接資料庫時正常,能夠得到正確的結果。但使用oledb方式連線時,卻無法傳回記錄集,而一旦操作傳回記錄集時就出現錯誤提示:
ADODB.Recordset 錯誤'800a0e78'
The operation requested by the application is not allowed if the object is closed.
令我百思不得其解。這是為什麼?
這是因為OLEDB與ODBC存在一個差異,就是,當ASP向ODBC取記錄集時,ODBC過濾了由create table
或insert into產生一些只佔位置但不能進行任何操作的記錄集,而當ASP向OLEDB取記錄集時,OLEDB並
沒有將這些記錄集過濾掉。所以,我們應在預存程序中不希望回傳記錄集前就執行set nocount on,
禁止儲存程序傳回記錄集;而要傳回記錄集時,就要先執行set nocount off。這樣,問題就會解決了。