Member 14832230 Ответов: 1

Объект параметра определен неправильно. Была представлена противоречивая или неполная информация.(varbinary(max))


Parameter object is improperly defined. Inconsistent or incomplete information was provided.(varbinary(max))
.

Мне нужно загрузить pdf-файл в varbinary(max) SQL .

Что я уже пробовал:

I used this code for store procedure. I receive the error at @vbin_Document

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open ConnectionString_ 
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = objConnection 
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "[Documents_Add]"
cmd.parameters.append cmd.createParameter("@str_NameByFacility",    adVarChar, adParamInput, 25, NameByFacility)
cmd.parameters.append cmd.createParameter("@str_ScanCode",          adVarChar, adParamInput, 70, ScanCode)
cmd.parameters.append cmd.createParameter("@vbin_Document",             adVarBinary, adParamInput, -1, Document)
cmd.parameters.append cmd.createParameter("@str_DocumentType",          adVarChar, adParamInput, 100, DocumentType)
cmd.parameters.append cmd.createParameter("@str_NodeName",          adVarChar, adParamInput, 100, NodeName)
cmd.parameters.append cmd.createParameter("@str_ApplicationName",   adVarChar, adParamInput, 100, ApplicationName)
cmd.parameters.append cmd.createParameter("@str_UserName",          adVarChar, adParamInput, 100, UserName)
cmd.parameters.append cmd.createParameter("@bit_isDone",            adInteger, adParamReturnValue)
cmd.parameters.append cmd.createParameter("@int_ErrorCode",         adInteger, adParamReturnValue)
cmd.parameters.append cmd.createParameter("@bint_ErrorID",          adInteger, adParamReturnValue)
cmd.execute 

Richard MacCutchan

Попробуйте использовать фактический размер в vbin_Document параметр, а не -1.

1 Ответов

Рейтинг:
1

CHill60

Как уже указывал @Richard-MacCutchan, проблема в очереди

cmd.parameters.append cmd.createParameter("@vbin_Document", adVarBinary, adParamInput, -1, Document)
это то, что вы дали размер данных -1.

Если вы не уверены, каким должен быть размер, то обычно вы полностью опускаете его, а не используете невозможное значение (ничто не может быть длиной -1), но если вы проверите документацию Метод CreateParameter (ADO) - SQL Server | Microsoft Docs[^] вы заметите
Цитата:
Если в аргументе Type указан тип данных переменной длины, то перед добавлением его в коллекцию параметров необходимо либо передать аргумент Size, либо задать свойство Size объекта Parameter; в противном случае возникает ошибка.
К сожалению вы не дали нам достаточно кода чтобы точно определить как узнать размер переменной Document, но вы должны сначала вычислить это значение и использовать его при создании параметра.

Кроме того, вы можете определить определенный размер поля и использовать его - см. Свойство DefinedSize - SQL Server | Microsoft Docs[^]

В худшем случае вы можете просто использовать большое количество (не рекомендуется, только backstop)
cmd.parameters.append cmd.createParameter("@vbin_Document", adVarBinary, adParamInput, 8000, Document)
Лично я никогда не храню документы в базах данных - я храню их в файловой системе (в конце концов, именно для этого они и предназначены) и записываю местоположение файла в базе данных в виде строки (наряду с другой информацией для проверки целостности, такой как дата последнего изменения, хэш-значение). Будучи пойманным ранее, я также сохраняю только путь относительно "базовой папки" - нам пришлось переместить репозиторий один раз, и имя сервера было встроено в данные - это было не очень веселое время.

Вам все равно придется указать длину данных, но это будет тривиально, или вы можете просто использовать максимальную длину пути 260