2007年8月9日 星期四

當SQL語法有用到 CURSOR 時

當用 ASP 寫連結資料庫的程式時,如果有用到 CURSOR, 會出現錯誤:(描述如下)

當執行 SQL Command 1 時,會出現 「當物件關閉時,不允許操作」的問題,
但是 執行 SQL Command 2 就不會。

是不是 執行 rs1.open 的時候,有參數要設定?

================================== SQL Command 1 ==================
declare @ShipperID int;

select * into #tmp from Shippers


DECLARE rsCursor CURSOR FOR
SELECT ShipperID FROM #tmp;

--開啟指標
OPEN rsCursor;

-- --移動指標到第一筆, 並將資料欄位填入變數中
FETCH NEXT FROM rsCursor INTO @ShipperID;

WHILE @@FETCH_STATUS=0
BEGIN
--更新資料表
Update #tmp set Phone='555' where ShipperID=@ShipperID
--移動指標到下一筆, 並將資料欄位填入變數中
FETCH NEXT FROM rsCursor INTO @ShipperID;
END

--關閉指標
CLOSE rsCursor;
--釋放指標
DEALLOCATE rsCursor;

select * from #tmp

drop table #tmp
======================================================================================




================================== SQL Command 2 ==================
select * from Shippers
====================================================================



rs1.open strSQL, conn, 3, 1


錯誤類型:
ADODB.Recordset (0x800A0E78)
當物件關閉時,不允許操作。
/SSOTest/test.asp, line 58
 

 

解決方法,是在SQL 語法裡面加上

SET NOCOUNT ON

參考網址:http://csdn.eyeah.cn/3116/1118/1126/232617673.html

據網址所言,是因為 odbc 與 oledb 資料集不同所造成。

沒有留言:

張貼留言