2012-10-26 1 views
1

OK, SQL 함수를 호출하고 출력을 반환하는 Classic ASP 함수를 작성하려고합니다. 매개 변수화 된 ADODB 연결을 사용하려고하지만이 기능이 어떻게 작동하는지 잘 모릅니다. 올바른 방법을 배우려고합니다.Classic ASP 함수를 통해 사용자 정의 함수 실행

SQL 함수는 하나가 "소금"이고 다른 하나는 실제 텍스트 인 두 개의 문자열 입력을 가져 와서 16 진수로 변환합니다. SQL에서는 제대로 작동하지만 고전적인 ASP에서는 작동하지 않습니다.

나는 점점 계속, 의 ADODB.Command '800a0cc1'오류

항목은 해당 요청한 이름 또는 서수 컬렉션에서 항목을 찾을 수 없습니다.

Sub Encrypt(plainString) 
    strSQL = "SET NOCOUNT ON;SELECT dbo.Encrypt('xx', '?') as keycode" 
    Set cnnEncrypt = Server.CreateObject("ADODB.Connection") 
    cnnEncrypt.open CONNSTRING 

    Dim cmd1 
    Set cmd1 = Server.CreateObject("ADODB.Command") 
    cmd1.ActiveConnection = cnnEncrypt 
    cmd1.CommandText = strSQL 
    cmd1.CommandType = adCmdText 
    cmd1.Parameters(0) = plainString  (**Original Error Occured Here!!!!**) 
    Set rsEncrypt = cmd1.Execute() 

    If not rsEncrypt.EOF Then 
     Encrypt = rsEncrypt.Fields("keycode").Value 
    Else 
     Encrypt = "blank" 
    End If 

    ' Clean Up  
    rsEncrypt.Close  
    Set rsEncrypt = Nothing  
    cnnEncrypt.Close  
    Set cnnEncrypt = Nothing  

End Sub 

"Cheran Shunmugavel"답변을 검토 한 후 새로운 작업 버전. (("테스트") 암호화) %이

<% Response.Write를 해독 같은 사이트에 전화 걸기>

가 진하기 때문에 당신은 페이지로 암호화 된 코드를 인쇄 할 수 없습니다. Binary to String 함수가 필요합니다. 함수에서 값을 반환하기 때문에 Sub에서 Function으로 변환했습니다.

Function Encrypt(byVal plainString) 
    strSQL = "SET NOCOUNT ON;SELECT dbo.Encrypt('xx', ?) as keycode" 
    Set cnnEncrypt = Server.CreateObject("ADODB.Connection") 
    cnnEncrypt.open CONNSTRING 

    Dim cmd1 
    Set cmd1 = Server.CreateObject("ADODB.Command") 
    cmd1.ActiveConnection = cnnEncrypt 
    cmd1.CommandText = strSQL 
    cmd1.CommandType = adCmdText 
    cmd1.Parameters.Append cmd1.CreateParameter("", adVarChar, adParamInput, Len(plainString)+1, plainString) 
    Set rsEncrypt = cmd1.Execute() 

    If not rsEncrypt.EOF Then 
     Encrypt = rsEncrypt.Fields("keycode").Value 
    Else 
     Encrypt = "blank" 
    End If 

    ' Clean Up  
    rsEncrypt.Close  
    Set rsEncrypt = Nothing  
    cnnEncrypt.Close  
    Set cnnEncrypt = Nothing  
End Function 

그리고 여기에 해독 기능이 있습니다.

Function Decrypt(byVal plainString) 
    strSQL = "SET NOCOUNT ON;SELECT dbo.Decrypt('xx', ?) as keycode" 
    Set cnnDecrypt = Server.CreateObject("ADODB.Connection") 
    cnnDecrypt.open CONNSTRING 

    Dim cmd1 
    Set cmd1 = Server.CreateObject("ADODB.Command") 
    cmd1.ActiveConnection = cnnDecrypt 
    cmd1.CommandText = strSQL 
    cmd1.CommandType = adCmdText 
    cmd1.Parameters.Append cmd1.CreateParameter("", adVarBinary, adParamInput, LenB(plainString)+1, plainString) 
    Set rsDecrypt = cmd1.Execute() 

    If not rsDecrypt.EOF Then 
     Decrypt = rsDecrypt.Fields("keycode").Value 
    Else 
     Decrypt = "blank" 
    End If 

    ' Clean Up  
    rsDecrypt.Close  
    Set rsDecrypt = Nothing  
    cnnDecrypt.Close  
    Set cnnDecrypt = Nothing  
End Function 

답변

2

먼저 매개 변수 자리 표시 자 주위에 구분 기호가 필요하지 않습니다. SQL Server는이를 적절하게 처리합니다.

strSQL = "SET NOCOUNT ON;SELECT dbo.Encrypt('xx', ?) as keycode" 

둘째, Parameters 수집은 처음에 비어 있고 채워야합니다 당신이 그것을 액세스하기 전에 (즉, 라인 cmd1.Parameters(0) = plainString). 이이 일을 여러 가지 방법이 있습니다,하지만 난 수동으로 CreateParameter 방법을 사용하여 매개 변수를 만드는 선호 : 또한

cmd1.Parameters.Append cmd1.CreateParameter("", adVarChar, adParamInput, Len(plainString), plainString) 

를, 당신의 코드에서 분명 아니지만, 사용자가 정의한 ADO 상수를 가지고 있는지 확인하십시오 referencing the type library 또는 including adovbs.inc 중 하나입니다.

+0

새 버전의 코드로 업데이트 된 질문을 받고 오류가 발생한 위치를 이전에 표시했습니다. 그 이후의 종류의 매개 변수 오류에 대해 설명해 주셔서 감사합니다. 이 페이지에는 adovbs.inc가 포함되어 있습니다. 변경 한 후에는 여전히 원하는 결과를 얻지 못하고 암호화 된 코드를 페이지에 인쇄하거나 변수에 저장하지 않습니다. 나는 단지 그것을 읽거나 잘못 부르고있다, 늦은 3am 일요일과 아마 나는 단지 그것을 완전히 놓치고있다. 월요일에 더 잘 볼 것입니다 :). – Maramor

+0

그래, 위의 아무것도 문제가 아니라, 그 문제는 데이터가 함수에서 반환 된 바이너리 필드이며 단순히 화면에 쓸 수 없다고 생각합니다. 그래서 나는 어떤 종류의 이진 변환을 필요로한다고 생각한다. – Maramor

+0

적어도이 부분과 관련된 모든 문제점을 해결했습니다 :). Cheran에게 도움을 주셔서 감사합니다. – Maramor