从sql server中的查询检索varbinary输出到经典ASP

从sql server中的查询检索varbinary输出到经典ASP

问题描述:

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

实际上,我试图为数据库连接设置(sp_setapprole)和取消设置(sp_unsetapprole)应用程序角色。首先我会设置批准,然后运行我所需的查询并最终取消批准。在unsetting期间,当我需要在我的ASP代码中的cookie(varbinary)值时,我可以创建一个查询,如'exec sp_unsetapprole @cookie'。那么在这个阶段,我没有cookie(varbinary)的值。

我这样做的原因是我尝试设置应用程序角色时,出现'sp_setapprole未被正确调用'的错误。我已通过在连接字符串中追加'OLE DB Services = -2; Pooling = False'来禁用池化。

我知道共享池有助于提高性能,但在这里我遇到了很大的问题。

请帮我出来检索一个经典的ASP文件varbinary值或建议一种方法来设置&未设置的应用程序角色。无论哪种方式解决方案是赞赏。

感谢, Nandagopal

也许你可以试试您铸造VARBINARY数据类型为IMAGE,这是够大,它可能是能够通过“经典” ASP中使用。只是一个想法。可能是错的。

最简单的方法是将sp_setapprole中的varbinary值存储在ADO记录集中并保留该值,而不用担心实际的类型(尽管如此,您应该可以将值存储在字节数组中)。

然后,当您需要在最终的sp_setapprole中放置该varbinary值时,可以简单地使用记录集值。通过调用sp_setapprole使用ADODB.Command对象做到这一点:

'--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得到一些启发。

+0

我也试过这个选项,但是当我从Command对象执行查询时遇到了这个问题。 EXEC sp_executesql的N'EXEC sp_unsetapprole @ P1”,N '@ P1 VARBINARY(36)',0x01000000CD11697F8F0ED362A471B0B05D0F47B9BDBBC423A1869EA4E510CD9F29230000 而这个消息15422导致 ,级别16,状态1,过程sp_unsetapprole,第18行 应用角色只能被激活在特设一级。 如果它是其他任何查询,它会工作,但作为sp_unsetapprole我不得不直接运行此查询到数据库。 – user303526 2010-03-28 15:35:47

+0

应该仍然可以:MSDN声明“sp_setapprole存储过程只能通过直接的Transact-SQL语句执行;它不能在另一个存储过程或用户定义的事务中执行”。你有没有尝试过这种交易?你也可以尝试改变命令类型。最后,查看SQL Profiler以查明ADO生成的数据库调用。 – tijmenvdk 2010-03-28 21:22:45