【问题标题】:ADODB Command Parameters Refresh doesn't retrieve parametersADODB 命令参数刷新不检索参数
【发布时间】:2017-05-25 06:29:31
【问题描述】:

我有一个旧的 Web 应用程序,在带有 SQL Server 2008 数据库的 IIS6 服务器上使用 VBScript 构建。它正在被移动到 IIS8 上的新服务器。

应用程序中的每个查询都使用存储过程,我们从来没有遇到过问题。但是在新服务器上,它似乎不起作用。我发现这是因为Command.Parameters.Refresh 没有正确返回参数。

考虑这段代码:

Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandType = 4
cmd.CommandText = v_strSpName
cmd.CommandTimeout = 0
cmd.Parameters.Refresh

For i = LBound(v_arrParameters) To UBound(v_arrParameters)
    If m_bReplaceEmptyToNull Then
        v_arrParameters(i)(1) = ReplaceEmpty(v_arrParameters(i)(1))
    End If

    cmd.Parameters(v_arrParameters(i)(0)).value = v_arrParameters(i)(1)
Next

v_arrParameters 中的所有内容都存在,但我在刷新后尝试在 Parameters.name 中迭代,没有返回参数(但它们在生产服务器上)。

另外值得注意的是,SQL Profiler 确实接收查询并返回参数:

exec [Database]..sp_procedure_params_rowset N'get_company',1,N'dbo',NULL

根据this page,这是一个已知问题,我只是想确保它不是来自这个问题,并找到一个不意味着完全重写应用程序的解决方案或替代方案。

还有,不能更新SQL Server版本,改用VB.NET,老是有客户端不为这个问题买单。

【问题讨论】:

  • 抱歉,我错过了该页面指出这是一个已知问题的地方?我能看到的最接近您描述的 “已知问题”“Parameters.refresh 在某些情况下会失败或返回不完全正确的信息。”。什么情况,没说。就个人而言,出于这个原因,我不使用.Refresh(),因为在使用此方法之前,我在提供者的支持方面遇到了问题。
  • @Lankymart 这就是我所说的这个“已知问题”,但并不是说这种情况非常无益。你用什么代替.Refresh()

标签: sql-server sql-server-2008 iis vbscript adodb


【解决方案1】:

所以我们设法让它这样工作:

  • 在 IIS 管理器中打开应用程序池部分。
  • 进入默认应用程序池的高级设置(这里是它的名字,可能不适合所有人,我不知道)
  • Enable 32-bits apps 设置为True

这是在 64 位 Windows Server 2012 R2 上,带有 Microsoft SQL Server 2008 (SP4) - 10.0.6241.0 (X64)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2021-06-06
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多