Я пытаюсь извлечь изображения из восстановленной базы данных. Приведенный ниже сценарий якобы работает нормально: это означает, что он извлекает изображения и сохраняет количество файлов, которые я ожидаю увидеть (и размер, который я ожидаю увидеть) в сетевую папку в виде файлов .pdf. Однако, когда я пытаюсь открыть файлы, я получаю сообщение об ошибке:
Adobe Reader не смог открыть «имя_файла.pdf», потому что это либо неподдерживаемый тип файла, либо файл был поврежден (например, он был отправлен как вложение электронной почты и не был правильно декодирован). эм>
- Я запускал этот скрипт раньше в других средах (точнее, в двух), и он работал нормально.
- Я убедился, что реальные изображения хороши. Вы можете получить доступ к файлам через внешний интерфейс.
- Не похоже, чтобы значения были зашифрованы. Хотя я не совсем уверен.
- Тип данных изначально: изображение
- Я использую SQL некоторое время, но считаю себя нубом, тогда как я в основном самоучка, так что, пожалуйста, полегче.
Любые рекомендации / предложения / идеи будут очень приветствоваться.
Спасибо.
--========================================================================
USE <<ENTER_DATABASENAME>>
GO
sp_configure 'show advanced options', 1
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1
GO
RECONFIGURE
GO
DECLARE @FILEID VARCHAR(12),
@IMAGE VARBINARY(MAX),
@OBJSTREAM INT,
@FILENAME VARCHAR(MAX),
@BASEDIR VARCHAR(MAX)
SET @BASEDIR = '<<ENTER_NETWORKPATH>>'
PRINT 'BASEDIR: ' + @BASEDIR
DECLARE IMGEXTRACT CURSOR FAST_FORWARD FOR
select <<ENTER_COLUMNNAME01>>, <<ENTER_COLUMNNAME02>>
from <<ENTER_TABLENAME>>
OPEN IMGEXTRACT
FETCH NEXT FROM IMGEXTRACT INTO @FILEID, @IMAGE
WHILE @@FETCH_STATUS = 0
BEGIN
SET @FILENAME = @BASEDIR + '\' + @FILEID + '.pdf'
PRINT @FILENAME
EXEC sp_OACreate 'ADODB.Stream', @OBJSTREAM OUTPUT
EXEC sp_OASetProperty @OBJSTREAM, 'Type', 1
EXEC sp_OAMethod @OBJSTREAM, 'Open'
EXEC sp_OAMethod @OBJSTREAM, 'Write', NULL, @IMAGE
EXEC sp_OAMethod @OBJSTREAM, 'SaveToFile', NULL, @FILENAME, 2
EXEC sp_OAMethod @OBJSTREAM, 'Close'
EXEC sp_OADestroy @OBJSTREAM
FETCH NEXT FROM IMGEXTRACT INTO @FILEID, @IMAGE
END
CLOSE IMGEXTRACT
DEALLOCATE IMGEXTRACT
GO
--========================================================================