好吧,我正在嘗試編寫一個傳統的ASP函數,它將調用SQL函數並返回輸出。 我想使用參數化ADODB連接,但我不太清楚這些工作是如何實現的。試圖學習正確的方法。通過傳統的ASP函數執行用戶定義函數
SQL函數只需要兩個字符串輸入,其中一個是「鹽」,另一個是實際文本並將其轉換爲十六進制。 在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解密器(Encrypt(「測試」))%>
不能打印的加密代碼的網頁,因爲它是二進制。你需要一個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
使用新版本的代碼更接近地更新問題,並標記之前發生錯誤的位置。感謝您解釋自那以來造成的那種參數錯誤。該頁面包含adovbs.inc。進行更改後,我仍然無法獲得所需的結果,無法在頁面上打印加密的代碼或存儲在變量中。我只是在閱讀或者說錯了,大約凌晨3點左右,也許我完全錯過了它。星期一會更好看:)。 – Maramor
好吧,上面沒有任何問題,我相信問題是從函數返回的數據是二進制字段,我不能簡單地將它寫入屏幕。所以我想我需要某種二進制字符串轉換。 – Maramor
解決了我所有的問題,至少與這部分相關:)。謝謝Cheran的幫助。 – Maramor