Как экспортировать двоичные данные в SqlServer в файл, используя DTS - PullRequest
1 голос
/ 18 февраля 2009

У меня есть столбец изображения в таблице SQL Server 2000, который используется для хранения двоичного файла PDF-файла.

Мне нужно экспортировать содержимое каждой строки в столбце в фактический физический файл, используя SqlServer 2000 DTS.

Я нашел следующий метод для VB на http://www.freevbcode.com/ShowCode.asp?ID=1654&NoBox=True

Set rs = conn.execute("select BinaryData from dbo.theTable")
FileHandle = FreeFile 
Open ("AFile") For Binary As #FileHandle 
ByteLength = LenB(rs("BinaryData")) 
ByteContent = rs("BinaryData").GetChunk(ByteLength)
Put #FileHandle, ,ByteContent 
Close #FileHandle

К сожалению, задача сценария DTS - это VBSCript, а не VB, и он вызывает ключевое слово AS в третьей строке.

Есть еще идеи?

Ответы [ 2 ]

1 голос
/ 19 февраля 2009

Написание бинарных файлов - общеизвестно сложная задача в VBScript. Единственные прямые файловые операции, предоставляемые VBScript, находятся в объекте FileSystemObject, который поддерживает только написание текстовых файлов. Единственным приемлемым вариантом является использование объектов ADO Stream , что по-прежнему громоздко, поскольку VBScript не поддерживает передачу созданных сценариями байтовых массивов в объекты COM, что необходимо для возможности записи произвольных двоичных данных.

Вот метод, использующий потоки ADO, который, вероятно, не будет работать, но может привести вас к правильному решению.

adTypeBinary = 1

Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT binary_data FROM dbo.data_table", "connection string..."
Set strm = CreateObject("ADODB.Stream")
strm.Type = adTypeBinary
strm.Open
strm.Write rs.Fields("binary_data").GetChunk( _
    LenB(rs.Fields("binary_data").Value))
strm.SaveToFile "binarydata.bin"
strm.Close
rs.Close

Я экспериментировал с этим кодом, используя Access, и, к сожалению, он, похоже, не работал. Я не получил те же двоичные данные, которые были в созданной мной таблице, но я не потрудился зайти в шестнадцатеричный редактор, чтобы увидеть, что было по-другому.

Если вы получаете ошибки от операции ADO, вы можете получить фактические сообщения , добавив «On Error Resume Next» в начало скрипта и используя этот код.

For Each err In rs.ActiveConnection.Errors
    WScript.Echo err.Number & ": " & err.Description
Next
0 голосов
/ 18 февраля 2009

Я бы пошел с SQL Server Integration Services (SSIS) вместо DTS, если это вообще возможно, и использовал бы задачу Script, которая позволила бы вам использовать VB.NET.

Вы можете подключиться к источнику данных SQL Server 2000 и указать экспортированный вывод в файл.

...