[英]Permission denied error when try use Scripting.Dictionary
我正在使用Windows Server 2008 R2 64位和IIS 7.5,並托管一個經典的ASP(32位)網站,並在COM服務器(也具有Windows Server 2008 R2 64位)上調用COM組件。 但是,出現錯誤“權限被拒絕”並且錯誤代碼為800A0046。
Set oDictAOGroup = CreateObject("Scripting.Dictionary")
oDictAOGroup.Add "1000", "5"
oUser.fn_Update_AO_Groups(oDictAOGroup)
ASP網站服務器使用DCOM與COM服務器進行通信。 在ASP網站上,服務器代理是由COM服務器類創建的。
我創建了一個測試函數,並將值傳遞給該函數,然后代碼運行正常。
oUser.fn_Update_AO_Groups_Test1("1000", "21")
但是,當嘗試傳遞Scipting.Dictionary對象時,會引發權限被拒絕的錯誤。 我為此做了很多搜索,但都沒有任何意義。
函數的代碼是
Public Function fn_Update_AO_Groups(vntAODict As Variant)
On Error GoTo ErrorHandler
Dim oADOConnect As AMLCONNECT_V2.clsConnect
Dim oADOConn As ADODB.Connection
Dim oADOCmd As ADODB.Command
Dim vntKey As Variant
If Not objContext Is Nothing Then
Set oADOConnect = objContext.CreateInstance("AMLCONNECT_V2.clsConnect")
Set oADOCmd = objContext.CreateInstance("ADODB.Command")
Else
Set oADOConnect = New clsConnect
Set oADOCmd = New ADODB.Command
End If
If IsObject(vntAODict) Then
If oADOConnect.OpenADOConnection(oADOConn) Then
With oADOCmd
.CommandText = "Sp_Upd_AOGroups"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("AO_ID", adInteger, adParamInput)
.Parameters.Append .CreateParameter("Email_Group_ID", adInteger, adParamInput)
Set .ActiveConnection = oADOConn
End With
'Execute stored procedure for each item in the dictionary
For Each vntKey In vntAODict.Keys
oADOCmd.Parameters("AO_ID").Value = vntKey
oADOCmd.Parameters("Email_Group_ID").Value = vntAODict(vntKey)
oADOCmd.Execute
Next
End If
End If
TidyUp:
Set oADOConn = Nothing
Set oADOCmd = Nothing
Set oADOConnect = Nothing
Exit Function
ErrorHandler:
Dim ErrHandler As AMLCONNECT_V2.clsConnect
If Not objContext Is Nothing Then
Set ErrHandler = objContext.CreateInstance("AMLCONNECT_V2.clsConnect")
Else
Set ErrHandler = New AMLCONNECT_V2.clsConnect
End If
m_sErrorMessage = "Error Number: " + CStr(Err.Number) + "<BR>" + "Description: " + ErrHandler.LogError(Err.Number, Err.Description, "MODULE: AMLADMIN_V2.clsUsers", "FUNCTION:fn_Update_AO_Groups", errError, errVB, errDatabase, "")
If Not ErrHandler Is Nothing Then Set ErrHandler = Nothing
GoTo TidyUp:
End Function
有人可以建議對此采取補救措施嗎?
函數接受字符串的代碼
Public Function fn_Update_AO_Groups_Test1(strKey As String, strValue As String)
On Error GoTo ErrorHandler
Dim oADOConnect As AMLCONNECT_V2.clsConnect
Dim oADOConn As ADODB.Connection
Dim oADOCmd As ADODB.Command
Dim vntKey As Variant
Dim ErrHandlerTest As AMLCONNECT_V2.clsConnect
If Not objContext Is Nothing Then
Set oADOConnect = objContext.CreateInstance("AMLCONNECT_V2.clsConnect")
Set oADOCmd = objContext.CreateInstance("ADODB.Command")
Else
Set oADOConnect = New clsConnect
Set oADOCmd = New ADODB.Command
End If
If oADOConnect.OpenADOConnection(oADOConn) Then
With oADOCmd
.CommandText = "Sp_Upd_AOGroups"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("AO_ID", adInteger, adParamInput)
.Parameters.Append .CreateParameter("Email_Group_ID", adInteger, adParamInput)
Set .ActiveConnection = oADOConn
End With
'Execute stored procedure for each item in the dictionary
oADOCmd.Parameters("AO_ID").Value = strKey
oADOCmd.Parameters("Email_Group_ID").Value = strValue
oADOCmd.Execute
End If
TidyUp:
Set oADOConn = Nothing
Set oADOCmd = Nothing
Set oADOConnect = Nothing
Exit Function
ErrorHandler:
Dim ErrHandler As AMLCONNECT_V2.clsConnect
If Not objContext Is Nothing Then
Set ErrHandler = objContext.CreateInstance("AMLCONNECT_V2.clsConnect")
Else
Set ErrHandler = New AMLCONNECT_V2.clsConnect
End If
m_sErrorMessage = "Error Number: " + CStr(Err.Number) + "<BR>" + "Description: " + ErrHandler.LogError(Err.Number, Err.Description, "MODULE: AMLADMIN_V2.clsUsers", "FUNCTION:fn_Update_AO_Groups", errError, errVB, errDatabase, "")
If Not ErrHandler Is Nothing Then Set ErrHandler = Nothing
GoTo TidyUp:
End Function
謝謝,Vaibhav
評論時間太長,因此雖然答案不完整,但可能會使您朝正確的方向前進。
首先,我注意到字段類型是整數,而字典鍵和值是字符串。 因此,首先嘗試通過將函數中的代碼更改為以下內容來進行轉換:
oADOCmd.Parameters("AO_ID").Value = CLng(vntKey)
oADOCmd.Parameters("Email_Group_ID").Value = CLng(vntAODict(vntKey))
如果仍然存在相同的錯誤,那么當您將兩個參數(而不是字典)顯式傳遞給函數時,我需要知道完全相同的代碼是否可以正常工作?
想到的另一件事可能是您的錯誤處理出了點問題,請嘗試將其刪除以進行調試,看看是否收到更有意義的錯誤消息。
使用不帶括號的Call oUser.fn_Update_AO_Groups(oDictAOGroup)
或oUser.fn_Update_AO_Groups oDictAOGroup
。
請嘗試以下簽名:
Public Function fn_Update_AO_Groups(ByVal vntAODict As Variant)
要么
Public Function fn_Update_AO_Groups(ByVal vntAODict As Scripting.Dictionary)
如果允許使用默認的ByRef
,則需要更多的編組代碼。 還提供期望的顯式類型也為編組代碼提供了更多選擇。 這些更改可能足以執行您期望的操作。
如果失敗,我將重新考慮該方法,我更喜歡將XML字符串傳遞到SP中。 這提供了最大的靈活性,允許對SQL和ASP進行代碼更改以實現新的需求,而無需重新編譯和部署新的二進制文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.