2010-03-28 86 views
0

我試圖從運行在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

回答

0

也許你可以試試您鑄造VARBINARY數據類型爲IMAGE,這是夠大,它可能是能夠通過「經典」 ASP中使用。只是一個想法。可能是錯的。

0

最簡單的方法是將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