[SQL] 오류 준비된 문을 저장 프로 시저를 호출하려고
SQL오류 준비된 문을 저장 프로 시저를 호출하려고
나는 (클래식 ASP와 ADODB를 사용하여) 저장 프로 시저를 호출하는 준비된 문을 사용하려고 해요,하지만 난 설정할 때 CommandType을 나는 다음과 같은 오류가 발생합니다 :
나는 다음과 같은 코드가 있습니다 :
With Server.CreateObject("ADODB.Command")
.ActiveConnection = db 'this is initialized prior
.CommandType = adCmdStoredProc
.CommandText = "procName"
End With
준비된 명령문 이름은 (난 그냥 문자열을 실행하여 호출 할 수있어), 그리고 내가 .CommandType을 떠나 .Execute를 호출하려고하면, 내가 지정하는 오류가 올바른지 :
나는 CommandType을을 생략하더라도, 사실 (다음 줄 잘못된 유형의 인수에 대한 원래 오류 단지 결과에 따라 뭔가를) 매개 변수를 추가하는 방법에 대해 아무 생각이 :
.Parameters.Append .CreateParameter("@ParamName",adVarChar,adParamInput,50,param)
나는 또한 다음을 시도하고 오류가있어 "항목이 요청한 이름 또는 서수에 해당하는 컬렉션에서 항목을 찾을 수 없습니다."
.Parameters.Refresh
.Parameters(0) = param
나는 준비된 문을 사용하여 저장 프로 시저를 호출하는 방법에 대한 몇 가지 예를 살펴 보았다, 그리고 올바른 구문을 사용하고 있습니다 것 같습니다,하지만 아무것도 I의 시도가 어떤 종류의 오류가 발생할 것으로 보인다. 어떤 도움을 크게 감상 할 수있다.
해결법
-
==============================
1.당신이 뭔가를 할 (안된)
당신이 뭔가를 할 (안된)
Dim cmd, rs, ars, conn Set cmd = Server.CreateObject("ADODB.Command") With cmd 'Assuming passing connection string if passing ADODB.Connection object 'make sure you use Set .ActiveConnection = conn also conn.Open should 'have been already called. .ActiveConnection = conn 'adCmdStoredProc is Constant value for 4 (include adovbs or 'set typelib in global.asa) .CommandType = adCmdStoredProc .CommandText = "dbo.procName" 'Define parameters in ordinal order to avoid errors Call .Parameters.Append(.CreateParameter("@ParamName", adVarChar, adParamInput, 50)) 'Set values using parameter friendly name .Parameters("@ParamName").Value = param 'Are you returning a recordset? Set rs = .Execute() 'Populate array with data from recordset If Not rs.EOF Then ars = rs.GetRows() Call rs.Close() Set rs = Nothing End With Set cmd = Nothing
기억하는 것이 중요하다 친숙한 이름 ADO는 ordinally 아무것도 더 많은 매개 변수를 전달 당신이 당신의 매개 변수 수단을 저장 프로 시저에 아무것도주지 (내가 ADO 내 친숙한 이름에 내 저장 프로 시저 내 매개 변수의 이름과 일치하는 경향이 규칙으로) , 사실은 당신이 오류를 얻을;
저장 프로 시저가 당신의 @ParamName의 (저장 프로 시저에 정의 된) 매개 변수 값을 기대하는 것이 일반적 의미 당신은 위치에있는 모든 매개 변수 값을 모든 매개 변수를 정의하거나 통과하지 않은 다른 서수 위치에 ADO에서 전달되는 제안들이 예상된다.
당신의 순서 위치 및 매개 변수를 요구하여 자신이 경우에도 단축 버전을 수행 할 수 있습니다
With cmd .ActiveConnection = conn .CommandType = adCmdStoredProc .CommandText = "dbo.procName" 'Pass parameters as array following ordinal position. Set rs = .Execute(, Array(param)) 'Populate array with data from recordset If Not rs.EOF Then ars = rs.GetRows() Call rs.Close() Set rs = Nothing End With Set cmd = Nothing
2 차원 어레이로 작업하기 용이하며 ADODB.Recordset 직접 작업의 부담을 부정한다.
Dim row, rows If IsArray(ars) Then rows = UBound(ars, 2) For row = 0 To rows Response.Write "First column from row " & row & " = " & ars(0, row) & "<br />" Next Else Response.Write "No data to return" End If
연결
-
==============================
2.다음은 ASP 고전에 저장 프로 시저를 호출하는 방법입니다 :
다음은 ASP 고전에 저장 프로 시저를 호출하는 방법입니다 :
'Set the connection '............... 'Set the command DIM cmd SET cmd = Server.CreateObject("ADODB.Command") SET cmd.ActiveConnection = Connection 'Set the record set DIM RS SET RS = Server.CreateObject("ADODB.recordset") 'Prepare the stored procedure cmd.CommandText = "procName" cmd.CommandType = 4 'adCmdStoredProc 'Assign value to the parameter cmd.Parameters("@ParamName ") = ParamValue 'Execute the stored procedure RS = cmd.Execute SET cmd = Nothing 'You can now access the record set if (not RS.EOF) THEN data = RS("column_name") end if 'dispose your objects RS.Close SET RS = Nothing Connection.Close SET Connection = Nothing
from https://stackoverflow.com/questions/21690564/error-trying-to-call-stored-procedure-with-prepared-statement by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PHP는 에코 내부 에코 (0) | 2020.05.30 |
---|---|
[SQL] MySQL의 계층 구조 자체 조인, 모든 하위 범주를 검색 (0) | 2020.05.30 |
[SQL] SQL 서버의 날짜를 비교하는 방법 (0) | 2020.05.30 |
[SQL] Where 절에 따라 SQL Server 쿼리 시간 초과 (0) | 2020.05.30 |
[SQL] 합니까 오라클은 숫자 데이터 유형에 대한 후행 제로를 저장? (0) | 2020.05.30 |