0

SQL から VARBINARY 列を取得し、バイナリ データを XML に変換しようとしています。データを簡単に取得して XML に変換することもできますが、最近、変換された XML ファイルの最後の数文字が切り捨てられ始めました。以下、コードと説明です。

これは、バイナリ データを取得する方法です。

Dim binaryData As Byte()
sqlData.Open()
        binaryCMD.CommandText = "select  photo from dbo.testing_filestream where clientName = '" &   clientSelected1 & "' and date = '" & minimumDate & "'"
        binaryCMD.CommandType = CommandType.Text
        binaryCMD.Connection = sqlData
        binaryData = binaryCMD.ExecuteScalar

次に、それを MemoryStream に変換します。

Dim xmlStream As New IO.MemoryStream(binaryData)
            xmlStream.Seek(0, 0)

次に、それを解凍します (圧縮モードだったため)。

Dim out_fs = New FileStream(XMLdataReader, FileMode.OpenOrCreate, FileAccess.Write)
            Dim unZip As DeflateStream = New DeflateStream(xmlStream, CompressionMode.Decompress)
            unZip.CopyTo(out_fs)
            unZip.Close()
            out_fs.Close()

ただし、xml ファイルの最後の数文字が切り捨てられます。(XMLdataReader は、ファイル名を含む単なる文字列です)。以下は切り捨てられた結果です。そのXMLをデータテーブルに変換したいので、完成させたいです。

</DocumentEle
Whereas, it should give this in the format of
</DocumentElement>

よろしくお願いします。私はこれを何度もグーグルで検索しましたが、サークルに参加しているだけだと確信できるまで質問はしません。これとは別に、ファイルに保存してからデータテーブルに変換することなく、この解凍されたバイナリ データを XML に変換できる方法はありますか。みんなありがとう。:)

4

1 に答える 1

0

この種の問題を回避するには、常に IDisposable リソースで Using を使用します。

Using in_fs = File.OpenRead("abc.xml")
Using out_fs = File.Create("def.cmp")
    Using df_fs = New DeflateStream(out_fs, CompressionMode.Compress)
        in_fs.CopyTo(df_fs)
    End Using
End Using
End Using

Using in_fs = File.OpenRead("def.cmp")
Using out_fs = File.Create("abc2.xml")
    Using df_fs = New DeflateStream(in_fs, CompressionMode.Decompress)
        df_fs.CopyTo(out_fs)
    End Using
End Using
End Using
于 2014-12-05T10:01:20.673 に答える