2014-01-08 1 views
0

У нас есть классическое приложение ASP ASP, которое использует ADODB для хранения документа в столбце изображения на SQL Server. Проблема, с которой мы сталкиваемся, заключается в том, что один байт теряется из большинства файлов. У нас есть один экземпляр, где файл не потеряет байта, поэтому я думаю, что это потенциально связанный с размером.Потеря одного байта при хранении данных в SQL Server Столбец изображения

До сих пор у нас есть ..

  • проверить, что правильная длина байт передается в ADOdb вызова CreateParameter.
  • Используется инструмент BCP SQL Server, чтобы убедиться, что файл поврежден в SQL Server, а не извлечением. Когда мы извлекли файл с помощью BCP, он не имеет байта И мы использовали параметр -w.

Есть ли у кого-нибудь советы о том, что мы могли бы попытаться сделать дальше?

UPDATE:

Мы сделали еще некоторое исследование и он появляется байты исчезают в ADODB. Мы делаем это ..

cmd.Parameters.Append cmd.CreateParameter ("SupportDocImage", adLongVarBinary, adParamInput, lSize, sFilePath)

Где lSize будет 123139 и sFilePath это двоичные данные (да .. плохое именование)

Это фактически отменяет хранимую процедуру и в этой хранимой процедуре мы будем выполнять DATALENGTH (@Variable), и вместо этого получим 123,138.

Также из-за того, что мы видели, это последний байт, который теряется.

+0

Любой конкретный байт? Это последний? – UnhandledExcepSean

+0

Кажется, что это всегда последний байт, но я проверю его с помощью pdf. –

+0

Как выглядит выражение SQL? Попробуйте выбрать длину данных ('select data_length (col)') сразу после вставки, чтобы убедиться, что ничто не приходит позже, чтобы изменить данные. – usr

ответ

0

Ознакомьтесь с этой статьей.

Решение для Oracle, но использует ADO все равно.

http://forums.devshed.com/visual-basic-programming-52/inserting-blob-s-via-adodb-stream-using-a-stored-procedure-103030.html

Попробуйте добавить +1 к размеру.

Кроме того, вы отключили эту функцию при загрузке изображения.

cmdSQL.Properties («SPPrmsLOB») = True

Несмотря на это, вы все равно должны написать хранимую процедуру, которая принимает VARBINARY (макс) или тип данных изображения и вставляет его в таблицу.

+0

Мы пробовали +1 по размеру и все еще имели его разрыв.SPPrmsLOB - это специальный параметр поставщика услуг Oracle, основанный на этой ссылке + Google –

+0

Пожалуйста, разместите весь скрипт vb, чтобы я мог попробовать. –