国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > ASP > 正文

asp sqlserver 執行存儲過程返回記錄集報對象關閉時

2024-05-04 11:08:48
字體:
來源:轉載
供稿:網友
asp sqlserver 執行存儲過程返回記錄集報對象關閉時不允許操作的臨時解決方法。大家有更好的方法,可以說下。
 
 
 
如果要得到返回值,需要用Command的方法。 
首先說明,返回值有兩種。一種是在存儲過程中直接return一個值,就象C和VB的函數返回值那樣;另一種是可以返回多個值,存儲這些值的變量名稱需要在調用參數中先行指定。 
這個例子要處理多種參數,輸入參數,輸出參數,返回記錄集以及一個直接返回值(夠全了吧?) 
存儲過程如下: 
復制代碼代碼如下:

use pubs 
GO 
-- 建立存儲過程 
create procedure sp_PubsTest 
-- 定義三個參數變量,注意第三個,特別標記是用于輸出 
@au_lname varchar (20), 
@intID int, 
@intIDOut int OUTPUT 
AS 
SELECT @intIDOut = @intID + 1 
SELECT * 
FROM authors 
WHERE au_lname LIKE @au_lname + ''%'' 
--直接返回一個值 
RETURN @intID + 2 

調用該存儲過程的asp程序如下: 
復制代碼代碼如下:

<%@ Language=VBScript %> 
<% 
Dim CmdSP 
Dim adoRS 
Dim adCmdSPStoredProc 
Dim adParamReturnValue 
Dim adParaminput 
Dim adParamOutput 
Dim adInteger 
Dim iVal 
Dim oVal 
Dim adoField 
Dim adVarChar 
‘這些值在 VB 中是預定義常量,可以直接調用,但在 VBScript 中沒有預定義 
adCmdSPStoredProc = 4 
adParamReturnValue = 4 
adParaminput = 1 
adParamOutput = 2 
adInteger = 3 
adVarChar = 200 
iVal = 5 
oVal = 3 
''建一個command對象 
set CmdSP = Server.CreateObject("ADODB.Command") 
''建立連結 
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"
''定義command 對象調用名稱 
CmdSP.CommandText = "sp_PubsTest" 
''設置command調用類型是存儲過程 (adCmdSPStoredProc = 4) 
CmdSP.CommandType = adCmdSPStoredProc 
''往command 對象中加參數 
''定義存儲過程有直接返回值,并且是個整數,省缺值是4 
CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4) 
''定義一個字符型輸入參數 
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M") 
''定義一個整型輸入參數 
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal) 
''定義一個整型輸出參數 
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal) 
''運行存儲過程,并得到返回記錄集 
Set adoRS = CmdSP.Execute 
''把每個記錄打印出來,其中的字段是虛擬的,可以不用管 
While Not adoRS.EOF 
for each adoField in adoRS.Fields 
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF 
Next 
Response.Write "<br>" 
adoRS.MoveNext 
Wend 
''打印兩個輸出值: 
Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>" 
Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>" 
''大掃除 
Set adoRS = nothing 
Set CmdSP.ActiveConnection = nothing 
Set CmdSP = nothing 
%> 

用asp調用存儲過程并返回記錄集的時候,一直報出“對象關閉時不允許操作”的錯誤,搜了很多問題,都不能對癥下藥,找了一段比較靠譜的代碼 
最后發現問題出現在存儲過程里,例子里的存儲過程沒有問題,但是用上我自己的存儲過程就報錯 
最后的解決辦法是在我自己用的存儲過程里的要在 
每個Insert語句之前都加一句set nocount on 也就是在游標循環里面加一句 
具體什么原因還沒有去深究,了解的人可以指明下,謝謝 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 惠安县| 莱芜市| 东平县| 南康市| 平江县| 云阳县| 凤山县| 大余县| 株洲市| 达孜县| 湖州市| 陇西县| 固始县| 德江县| 镇远县| 息烽县| 邵阳县| 苍溪县| 开江县| 左权县| 辽阳市| 鹤庆县| 阿城市| 河东区| 大方县| 陕西省| 屏东县| 宁阳县| 茌平县| 澳门| 迁安市| 南川市| 大洼县| 河东区| 嘉义市| 大邑县| 寿阳县| 公安县| 农安县| 城口县| 旺苍县|