DOBON.NET DOBON.NETプログラミング掲示板過去ログ

MemoryStreamからデータベースへの登録方法は

分類:[.NET]

度々すみません。また質問があります。

以前Windowsフォーム上の画像をBMPファイルに抽出し
FileStreamを使用してデータベースに登録していました。

画像ファイルを使用せずにデータベースに登録する方法として
画像をMemoryStreamに代入したのですが
MemoryStreamからデータベースに登録する方法がどうしても判りません。
その方法をどなたか教えていただけないでしょうか。
またはMemoryStream自体が間違っているのでしょうか。

宜しくお願いします。
こんにちは、nobuさん。ピラルクです。

どちらも同じStreamからの派生なので、同じように扱える。
よってFileStreamをMemoryStreamに変えるだけで、既存
コードをそのまま流用できる。

というのが(直感的な)方法だと思うのですが、何かが上手
くいかないのでしょうか?
■No830に返信(ピラルクさんの記事)
ピラルクさん、返信ありがとうございます。

> どちらも同じStreamからの派生なので、同じように扱える。
> よってFileStreamをMemoryStreamに変えるだけで、既存
> コードをそのまま流用できる。
自分もそう思っていたのですが・・・
ちなみにFileStream(myFS)の時はBMPファイルから
myFS = New FileStream("c:\\test.bmp", FileMode.OpenOrCreate, FileAccess.Read)
で取得していましたが
MemoryStream(myMS)の時はファイルを使用しないので
Picture1.Image.Save(myMS, Stsytem.Drawing.Imaging.ImageFormat.Bmp)
で取得していました。
それ以外はどちらも同じようにDataRowを使用してデータベースに
登録しました。

> というのが(直感的な)方法だと思うのですが、何かが上手
> くいかないのでしょうか?
FileStream、MemoryStreamとも入力はされるものの
データベースからBmpファイルへ取り出してみると
BmpファイルのサイズはFileStream、MemoryStreamともに
同じですがMemoryStreamの方だけBmpファイルが壊れているのです。
こんばんは、nobuさん。ピラルクです。

Picture1.Image.Save(myMS, Stsytem.Drawing.Imaging.ImageFormat.Bmp)
myMS.Seek(0, SeekOrigin.Begin)

Dim myBR As New BinaryReader(myMS)
……

の、Seek()が抜けてる?
■No847に返信(ピラルクさんの記事)
おはようございます、ピラクルさん。nobuです。

> Picture1.Image.Save(myMS, Stsytem.Drawing.Imaging.ImageFormat.Bmp)
> myMS.Seek(0, SeekOrigin.Begin)
>
> Dim myBR As New BinaryReader(myMS)
> ……

の方法でソースを書き直したら成功しました。
本当に、本当に有難うございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板