powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Странные вещи в ADO с параметрами Text и Image
4 сообщений из 4, страница 1 из 1
Странные вещи в ADO с параметрами Text и Image
    #32068947
Из клиента на VB вызываю процедуру данная процедура берет часть параметров от клиента часть из таблицы настроек и вызывает расширенную хранимую.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
ALTER  PROCEDURE exec_extended
@bData image output,
@FileName varchar( 128 ) output,
@CountRegAcc int output,
@BitParameters tinyint
AS
declare @proc varchar( 128 )
declare @destdb varchar( 128 )
declare @dictdb varchar( 128 )
declare @batchsize int
declare @ntop int
declare @cra integer
declare @amountofdaysbefreg smallint
select top  1  @batchsize=BatchSize, @ntop=NTop,@amountofdaysbefreg=AmountOfDaysBefReg from t_Settings order by DateBeg desc


Set @proc='usp_CheckAccounts'  --имя процедуры проверяющей данные
 
Set @destdb='Accounts'  --База в которую поместим данные после проверки
 
Set @dictdb='Accounts'  --База в которой справочники для проверки данных перед внесением
 

select datalength(@bData) As DataLen into tlen  --ЭТО ДЛЯ ПРОВЕРКИ РАЗМЕРА ДАННЫХ ПРИШЕДШИХ В ПРОЦЕДУРУ
 
exec master..uxp_ImportAccounts @bData output  /*,@proc,@destdb,
		@dictdb,@FileName output,@cra output,@ntop,@BitParameters,@batchsize,@amountofdaysbefreg*/ 


Проблема в том, что мне первый параметр @bData (text или image) нужен как output (если он input то проблем нет). Вот код вызова на VB
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    Set cm.ActiveConnection = cn
    cm.CommandType = adCmdStoredProc
    cm.CommandText =  "exec_extended" 
    'cm.Parameters.Refresh
    Set prmRV = cm.CreateParameter( "@RETURN_VALUE" , adInteger, adParamReturnValue)
    Set bData = cm.CreateParameter( "@bData" , adLongVarBinary, adParamInputOutput)
    Set fname = cm.CreateParameter( "@FileName" , adChar, adParamOutput,  128 )
    Set CRA = cm.CreateParameter( "@CountRegAcc" , adInteger, adParamOutput)
    Set BitParameters = cm.CreateParameter( "@BitParameters" , adTinyInt, adParamInput,  1 ,  1 )
    
    myfile = FreeFile
    Open filename For Binary As #myfile
    ReDim z1(Myfilelen -  1 )
    t1 = Now()
    CurPos =  0 
    Get #myfile, , z1
    bData.AppendChunk z1
    bData.Size = Myfilelen
    
    cm.Parameters.Append prmRV
    cm.Parameters.Append bData
    cm.Parameters.Append fname
    cm.Parameters.Append CRA
    cm.Parameters.Append BitParameters
    cm.Execute

Мне не совсем понятно, что надо указывать в строке Set bData = cm.CreateParameter("@bData", adLongVarBinary, adParamInputOutput) adVarBinary или adLongVarbinary, так как в книге Поль-Конте говорится, что для Text-adLongVarchar, для image-adLongVarBinary, если я так указываю у меня ошибка происходит. Вот что сервер выдает на консоль при отладке расширенной процедуры
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 2002 - 11 - 18   11 : 21 : 34 . 17  spid9     Starting up database 'Accounts2'.
 2002 - 11 - 18   11 : 21 : 34 . 21  spid10    Starting up database 'Accounts'.
 2002 - 11 - 18   11 : 21 : 36 . 37  spid5     Starting up database 'tempdb'.
 2002 - 11 - 18   11 : 21 : 36 . 56  spid3     Recovery complete.
 2002 - 11 - 18   11 : 21 : 36 . 56  spid3     SQL global counter collection task is created.
 2002 - 11 - 18   11 : 23 : 00 . 41  spid52    Error:  17805 , Severity:  20 , State:  3 
 2002 - 11 - 18   11 : 23 : 00 . 41  spid52    Invalid buffer received from client..
 2002 - 11 - 18   11 : 23 : 51 . 37  spid52    Error:  17805 , Severity:  20 , State:  3 
 2002 - 11 - 18   11 : 23 : 51 . 37  spid52    Invalid buffer received from client..


Решил узнать какого же типа параметр разкоментировал строку в VB 'cm.Parameters.Refresh а на следующей бряк ставлю смотрю параметр - adVarbinary. Ставлю adVarBinary (сначала это и стояло, до того как не сделал параметр процедуры output) начинается другая проблема, в процедуру приходит в параметр @bData всего 8000 байтов.
Определяю то что приходит 8000 строкой в хранимой
Код: plaintext
select datalength(@bData) As DataLen into tlen
в таблицу tlen попадает 8000 да и в расширенной при отладке тоже самое. Тогда решил параметр @bData процедуры exec_extended сделать input и тогда все нормально в таблицу идет значение = рамеру файла (~400kb) и в расширенной я тоже самое получаю, НО МНЕ ОН НУЖЕН КАК OUTPUT.

А ведь в BOL в топике Create procedure сказано:
OUTPUT

Indicates that the parameter is a return parameter. The value of this option can be returned to EXEC[UTE]. Use OUTPUT parameters to return information to the calling procedure. Text, ntext, and image parameters can be used as OUTPUT parameters. An output parameter using the OUTPUT keyword can be a cursor placeholder.

Те же яй.. если ставлю text.


У меня
Microsoft SQL Server 2000 - 8.00.534 (Intel X8
6)
Nov 19 2001 13:23:50
Copyright (c) 1988-2000 Microsoft Corporation
Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 2)
Использую ADO 2.7.
...
Рейтинг: 0 / 0
Странные вещи в ADO с параметрами Text и Image
    #32068956
Выход конечно есть у меня из данной ситуации
1) в расширенной клиенту сделать resulset с одним полем типа text и вернуть на клиента.
2) сделать прямой вызов расширенной а та пусть сама достает из базы недостающие параметры.
Но мне все таки очень интересно почему так не работает?
...
Рейтинг: 0 / 0
Странные вещи в ADO с параметрами Text и Image
    #32068958
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В BOL сказано: Return parameters can be of any data type except the text or image data types.

Это в разделе описания оператора EXECUTE в описании опции OUTPUT

Так что выход один - возвращать image как поле рекордсета.
...
Рейтинг: 0 / 0
Странные вещи в ADO с параметрами Text и Image
    #32068968
2 Dankov.
Спасибо большое.

Все таки забавно получается сделать процедуру можно что бы параметр был output, а получить назад нельзя зачем так было сделано непонятно.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Странные вещи в ADO с параметрами Text и Image
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]