복붙노트

[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. ==============================

    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. ==============================

    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
    
  3. from https://stackoverflow.com/questions/21690564/error-trying-to-call-stored-procedure-with-prepared-statement by cc-by-sa and MIT license