1

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 テキストに変換する方法がわかれば、アプリケーションを続行できます。

4

1 に答える 1

0

以下は私にとってはうまくいきます。問題は、ファイルをデータベースに保存する方法にあると思われます。

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
于 2011-03-14T15:02:44.843 に答える