我試圖從MS SQL中的圖像日期字段中獲取RTF數據。不那麼容易。如何將varbinary數據類型轉換回MSSQL中的ascii
問題是,當我對數據字段進行直接二進制轉儲時,它不是RTF格式。
讓我解釋一下發生了什麼。當我用寫字板創建一個RTF文件,並將該數據寫入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 6E 73 69) (ASCII {\ RTF1 \ ANSI \ ANSI) 然而,VARBINARY場看起來是這樣的: 0XB0 04 01 00 0E 00 00 00 00 00 00 00 00 00 09 00
當我拿這些數據出來的數據庫(通過使用上述過程的反向),它不是一個可識別的RTF文件。所以,無論如何MS都以我無法識別的方式轉換它。如果我能想出如何將其轉換回ascii文本,那麼我可以繼續我的應用程序。
此代碼完整無誤嗎?這似乎只寫出你從行中拉出的@imageBinary。你怎麼把它放到行中? – 2011-03-14 14:12:20