2010-03-28 1 views
0

Я пытаюсь получить выходное значение varbinary из запроса, запущенного на SQL Server 2005, в классический ASP. Выполнение ASP просто терпит неудачу, когда дело доходит до части кода, который просто принимает вывод varbinary в строку. Поэтому я думаю, что мы должны справиться с этим по-другому.Извлечение varbinary выход из запроса в sql-сервере в классический ASP

На самом деле, я пытаюсь установить (sp_setapprole) и unset (sp_unsetapprole) роли приложения для подключения к базе данных. Сначала я бы установил апелляцию, затем я запустил свои требуемые запросы и, наконец, отменил решение. Во время сбрасывания - когда мне нужно значение cookie (varbinary) в моем ASP-коде, чтобы я мог создать такой запрос, как «exec sp_unsetapprole @cookie». На этом этапе у меня нет значения cookie (varbinary).

Причина, по которой я делаю это, я использовал для получения ошибки «sp_setapprole был неправильно вызван» при попытке установить роли приложения. Я отключил объединение, добавив в мою строку подключения «OLE DB Services = -2; Pooling = False».

Я знаю, что объединение помогает производительности, но здесь у меня большие проблемы.

Пожалуйста, помогите мне получить значение varbinary в классическом файле ASP или предложите способ установить & unset роли приложения. В любом случае решения оцениваются.

Спасибо, Nandagopal

ответ

0

Может быть, вы могли бы попробовать Отдавая свой VARBINARY тип данных в изображение, которое достаточно стара, что это могло бы быть в состоянии быть использованы «Classic» ASP. Просто мысль. Может быть, неправильно.

0

Самый простой способ - сохранить значение varbinary из sp_setapprole в наборе записей ADO и сохранить это значение, не беспокоясь о фактическом типе (вы должны иметь возможность хранить значение в массиве байтов).

Затем, когда вам нужно поместить это значение varbinary в ваш окончательный sp_setapprole, вы можете просто использовать значение набора записей. Сделайте это путем вызова 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 И это приводит к Msg 15422, уровень 16, состояние 1, процедура sp_unsetapprole, строка 18 роли приложений могут быть активированы только на уровне ad hoc. Если бы это был какой-то другой запрос, он бы сработал, но, будучи sp_unsetapprole, я должен запустить этот запрос «напрямую» в базу данных. – user303526

+0

Должно быть возможным: состояния MSDN «Хранимая процедура sp_setapprole может выполняться только с помощью прямых операторов Transact-SQL, она не может быть выполнена в другой хранимой процедуре или из пользовательской транзакции». Вы не пытаетесь сделать это внутри транзакции случайно? Вы также можете попытаться изменить командный стиль. Наконец, посмотрите на SQL Profiler, чтобы узнать, какие вызовы базы данных генерируются ADO. – tijmenvdk

Смежные вопросы