MS SQL のイメージ日付フィールドから RTF データを取得しようとしています。それほど簡単ではありません。
問題は、データ フィールドのストレート バイナリ ダンプを実行すると、RTF 形式ではないことです。
何が起こっているのか説明しましょう。ワードパッドで RTF ファイルを作成し、そのデータを varbinary(max) に書き込んで再変換すると、結果がぎこちなくなります。
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 ) のようになります。 01 00 0E 00 00 00 00 00 00 00 00 00 09 00
そして、そのデータをデータベースから取り出すと (上記の逆の手順を使用して)、認識可能な RTF ファイルではありません。それで、どういうわけか、MSは私が認識できない方法でそれを変換しています。それを ascii テキストに変換する方法がわかれば、アプリケーションを続行できます。