Как преобразовать тип данных varbinary обратно в ascii в MSSQL - PullRequest
1 голос
/ 14 марта 2011

Я пытаюсь получить данные RTF из поля даты изображения в MS SQL.Не просто.

Проблема в том, что когда я делаю прямой двоичный дамп поля данных, он не в формате RTF.
Позвольте мне объяснить, что происходит.Когда я создаю RTF-файл с помощью Wordpad, записываю эти данные в varbinary (max) и преобразовываю его, результатом является jiberish.

Код для помещения данных RTF в MS SQL:

exec master..sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
exec master..sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
DECLARE @objStream INT
DECLARE @imageBinary VARBINARY(MAX)
DECLARE @filePath VARCHAR(8000)

select @imageBinary=Report from Mytable WHERE EncounterID=7
select @filePath='c:\temp\report.rtf'
EXEC sp_OACreate 'ADODB.Stream', @objStream OUTPUT
EXEC sp_OASetProperty @objStream, 'Type', 1
EXEC sp_OAMethod @objStream, 'Open'
EXEC sp_OAMethod @objStream, 'Write', NULL, @imageBinary
EXEC sp_OAMethod @objStream, 'SaveToFile', NULL,@filePath, 2
EXEC sp_OAMethod @objStream, 'Close'
EXEC sp_OADestroy @objStream

В двоичном виде первая часть этого файла выглядит следующим образом: 0x7B 5C 72 74 66 31 5C 61 6E 73 69 5C 61 6E73 69) (ascii {\ rtf1 \ ansi \ ansi) Однако поле varbinary выглядит так: 0xB0 04 01 00 0E 00 00 00 00 00 00 00 00 09 00

И когда я беру эти данныевне базы данных (с помощью обратной процедуры, описанной выше), это не распознаваемый файл RTF.Так что, каким-то образом MS преобразует это так, что я не могу распознать.Если я смогу выяснить, как преобразовать его обратно в текст ascii, тогда я смогу продолжить свое приложение.

1 Ответ

0 голосов
/ 14 марта 2011

У меня работает следующее.Я подозреваю, что проблема заключается в том, как вы сохраняете файл в базу данных.

CREATE TABLE #BlobTest
(
blob varbinary(max) 
)

INSERT INTO
    #BlobTest (blob)
SELECT  BulkColumn FROM Openrowset( 
      Bulk 'C:\testing.rtf', 
      SINGLE_BLOB) AS blob

GO

exec master..sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
exec master..sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
DECLARE @objStream INT
DECLARE @imageBinary VARBINARY(MAX)
DECLARE @filePath VARCHAR(8000)

select @imageBinary=blob from #BlobTest
select @filePath='c:\report.rtf'
EXEC sp_OACreate 'ADODB.Stream', @objStream OUTPUT
EXEC sp_OASetProperty @objStream, 'Type', 1
EXEC sp_OAMethod @objStream, 'Open'
EXEC sp_OAMethod @objStream, 'Write', NULL, @imageBinary
EXEC sp_OAMethod @objStream, 'SaveToFile', NULL,@filePath, 2
EXEC sp_OAMethod @objStream, 'Close'
EXEC sp_OADestroy @objStream
...