Asp sqlserver는 저장 프로시저를 실행하여 레코드 집합 개체가 닫힐 때 작업이 허용되지 않는다는 임시 솔루션을 반환합니다. 더 좋은 방법이 있으면 알려주세요.
반환 값을 얻으려면 Command 메서드를 사용해야 합니다.
우선, 반환 값에는 두 가지 유형이 있습니다. 하나는 C와 VB의 함수 반환 값처럼 저장 프로시저에서 직접 값을 반환하는 것이고, 다른 하나는 여러 값을 반환하는 것이며, 이러한 값을 저장할 변수 이름을 먼저 호출 매개변수에 지정해야 합니다. .
이 예는 여러 매개변수, 입력 매개변수, 출력 매개변수, 반환 레코드 세트 및 직접 반환 값을 처리해야 합니다(충분히 완료되었습니까?)
저장 프로시저는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
술집을 이용하다
가다
-- 저장 프로시저 생성
sp_PubsTest 프로시저 생성
--3개의 매개변수 변수를 정의합니다. 세 번째 변수는 특별히 출력용으로 표시됩니다.
@au_lname varchar (20),
@intID 정수,
@intIDOut int 출력
처럼
SELECT @intIDOut = @intID + 1
선택하다 *
저자로부터
@au_lname + ''%''와 같은 au_lname 위치
--값을 직접 반환
@intID + 2 반환
이 저장 프로시저를 호출하는 ASP 프로그램은 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
<%@ 언어=VBScript %>
<%
희미한 CmdSP
디마도RS
희미한 광고CmdSPStoredProc
광고 매개변수 반환 값이 희미함
희미한 광고 Paraminput
희미한 광고 매개변수 출력
희미한 광고정수
희미한 iVal
희미한 타원형
Dim adoField
희미한 adVarChar
'이 값은 VB에서 미리 정의된 상수이므로 직접 호출할 수 있지만 VBScript에서는 미리 정의되어 있지 않습니다.
adCmdSPStoredProc = 4
adParamReturnValue = 4
adParaminput = 1
adParamOutput = 2
adInteger = 3
adVarChar = 200
iVal = 5
타원형 = 3
''명령 개체 만들기
set CmdSP = Server.CreateObject("ADODB.Command")
''링크 만들기
CmdSP.ActiveConnection = "드라이버={SQL Server};서버=(로컬);Uid=sa;Pwd=;데이터베이스=Pubs"
''명령 개체 호출 이름을 정의합니다.
CmdSP.CommandText = "sp_PubsTest"
''명령 호출 유형을 저장 프로시저로 설정합니다(adCmdSPStoredProc = 4).
CmdSP.CommandType = adCmdSPStoredProc
''명령 개체에 매개 변수를 추가합니다.
''직접 반환 값을 갖도록 저장 프로시저를 정의하며 기본값은 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)
''저장 프로시저를 실행하고 반환된 레코드세트를 가져옵니다.
adoRS = CmdSP.Execute 설정
''각 기록을 인쇄하세요. 해당 필드는 가상이므로 무시할 수 있습니다.
adoRS.EOF가 아닌 동안
adoRS.Fields의 각 adoField에 대해
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
다음
응답."<br>" 쓰기
adoRS.MoveNext
향하게 하다
''두 개의 출력 값을 인쇄합니다:
Response.Write "<p>@intIDOut = " & CmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>반환 값 = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"
''청소
adoRS = 아무것도 설정하지 않음
CmdSP.ActiveConnection = 없음으로 설정
CmdSP = 없음으로 설정
%>
ASP를 사용하여 저장 프로시저를 호출하고 레코드 세트를 반환할 때 "개체가 닫힐 때 작업이 허용되지 않습니다"라는 오류가 계속 보고되지만 많은 질문을 검색했지만 올바른 해결책을 찾을 수 없습니다. 보다 안정적인 코드를 제공합니다.
마지막으로 저장 프로시저에서 문제가 발생한 것을 확인했습니다. 예제에서는 저장 프로시저에 문제가 없었지만, 제가 직접 저장 프로시저를 사용했을 때 오류가 발생했습니다.
최종 해결책은 내가 사용하는 저장 프로시저에 넣는 것입니다.
각 Insert 문 앞에 문장에 set nocount를 추가합니다. 즉, 커서 루프 내에 문장을 추가합니다.
아직 구체적인 이유는 조사하지 않았습니다. 아시는 분은 지적해 주시면 감사하겠습니다.