【问题标题】:Retrieving varbinary output from a query in sql server into classic ASP从 sql server 中的查询中检索 varbinary 输出到经典 ASP
【发布时间】:2011-12-01 10:41:27
【问题描述】:

我正在尝试将 SQL Server 2005 上运行的查询中的 varbinary 输出值检索到经典 ASP 中。当涉及到将 varbinary 输出转换为字符串的部分代码时,ASP 执行就会失败。所以我想我们必须以其他方式处理它。

实际上,我正在尝试为数据库连接设置 (sp_setapprole) 和取消设置 (sp_unsetapprole) 应用程序角色。首先我设置了approle,然后我运行了我需要的查询,最后取消了approle。在取消设置期间,我需要 ASP 代码中的 cookie (varbinary) 值,以便我可以创建类似“exec sp_unsetapprole @cookie”的查询。好吧,在这个阶段,我没有 cookie (varbinary) 值。

我这样做的原因是,在尝试设置应用角色时,我曾经收到“sp_setapprole 未正确调用”错误。我已通过将“OLE DB Services = -2;Pooling=False”附加到我的连接字符串中来禁用池。

我知道池有助于提高性能,但在这里我面临着大问题。

请帮助我将 varbinary 值检索到经典 ASP 文件中,或者建议一种设置和取消设置应用角色的方法。无论哪种方式的解决方案都值得赞赏。

谢谢, 南达戈帕尔

【问题讨论】:

    标签: sql-server asp-classic varbinary


    【解决方案1】:

    也许您可以尝试将您的 VARBINARY 数据类型转换为 IMAGE,它已经足够老,可以被“经典”ASP 使用。只是一个想法。可能是错的。

    【讨论】:

      【解决方案2】:

      最简单的方法是将来自 sp_setapprole 的 varbinary 值存储在 ADO 记录集中并保留该值,而不用担心实际类型(不过,您应该能够将值存储在字节数组中)。

      然后,当您需要将该 varbinary 值放入最终的 sp_setapprole 时,您可以简单地使用记录集值。通过使用 ADODB.Command 对象调用 sp_setapprole 来执行此操作:

      '--untested, syntax could be slightly off'
      Set myCommand = Server.CreateObject("ADODB.Command")
      With myCommand
          .ActiveConnection = myConnection
          .CommandType = adCmdStoredProc
          .CommandText = "sp_unsetapprole"
          .Parameters.Append _
              .CreateParameter("@Cookie", adLongVarBinary, adParamInput, fileSize)
          .Parameters(str_ParamName).Attributes = adFldLong
          .Parameters(str_ParamName).AppendChunk myRecordset.Fields("Cookie").Value
          .Execute
      End With
      

      也许你也可以从this Stackoverflow question那里得到一些见解。

      【讨论】:

      • 我也尝试过这个选项,但是当从 Command 对象执行查询时遇到了这个问题。 exec sp_executesql N'EXEC sp_unsetapprole @P1 ',N'@P1 varbinary(36)',0x01000000CD11697F8F0ED362A471B0B05D0F47B9BDBBC423A1869EA4E510CD9F29230000 And this results in Msg 15422, Level 16, State 1, Procedure sp_unsetapprole, Line 18 Application roles can only be activated at the ad hoc level .如果是任何其他查询,它会起作用,但是作为 sp_unsetapprole,我必须“直接”在数据库上运行这个查询。
      • 应该仍然可行:MSDN 声明“sp_setapprole 存储过程只能由直接 Transact-SQL 语句执行;它不能在另一个存储过程中或从用户定义的事务中执行。”。您是否不会在交易中尝试此操作?您也可以尝试更改命令类型。最后,查看 SQL Profiler,了解 ADO 生成了哪些数据库调用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多