[英]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.