@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

【SQL Server Compact】画像(イメージファイル)の格納方法

1
投稿者投稿内容
T2
会議室デビュー日: 2008/07/14
投稿数: 10
投稿日時: 2008-07-29 18:24
開発環境
C#
CF2.0
VA2005
WM6
SQL Server Compact 2005

現在以下の手順で画像(イメージファイル)をDB(sdfファイル)へ格納しています。
格納先のデータ型はimageです。

@Bitmapオブジェクトを作成し指定したフルパスのイメージファイルをインスタンス化する。
System.Drawing.Bitmap imgFile = new Bitmap(フルパス);

AMemoryStreamを生成しストリーム上にBitmapインスタンスをJPEGファイルとして保存する。
System.IO.MemoryStream stream = new MemoryStream();
imgFile .Save(stream, ImageFormat.Jpeg);

Bストリームの内容をバイト配列に書き込む。
byte[] imageByte = stream.ToArray();
stream.Close();

Cバイト配列データをDB(データ型:image)に格納する。

格納方法としてはこの方法で最善でしょうか?

また、イメージファイルをバイト配列データに変換せずに
そのままimageデータ型に格納することは可能なのでしょうか?
試したのですがうまくいきませんでした。
これができればソースが簡略化されるのではと思っています。
nas
会議室デビュー日: 2008/08/01
投稿数: 7
投稿日時: 2008-08-04 08:33
こんにちは。nasです。

少し興味があったので試してみました。
尚、WM6の環境はないので通常のPC上でやってます。
引用:
現在以下の手順で画像(イメージファイル)をDB(sdfファイル)へ格納しています。
格納先のデータ型はimageです。
(略)
格納方法としてはこの方法で最善でしょうか?


@〜Bの手順は回りくどい事をしています。
直接、イメージファイル(JPEGファイル)の内容をバイト配列に格納で良いと思います。
以下はサンプルです。
コード:
FileStream fs = new FileStream(フルパス, FileMode.Open, FileAccess.Read);
byte[] imageByte = new byte[fs.Length];
fs.Read(imageByte, 0, (int)fs.Length);
fs.Close();


それと、提示された方法だとイメージを加工しているので、登録する毎に
元ファイルと違ったデータになります。
こちらで試した結果、DBに格納して取り出すと見た目とファイルサイズは同じですが
バイナリ比較すると同一ではありませんでした。

引用:
また、イメージファイルをバイト配列データに変換せずに
そのままimageデータ型に格納することは可能なのでしょうか?
試したのですがうまくいきませんでした。


直接イメージファイルを格納する事は出来ないと思います。
また、何故バイト配列にしているのかはMSDNライブラリで
SqlDbType列挙体のImageの説明を見ると分ると思います。
T2
会議室デビュー日: 2008/07/14
投稿数: 10
投稿日時: 2008-08-05 15:49
>nasさん
わざわざ実践していただきありがとうございます。
丁寧な説明のおかげで理解することができました。
不要な手順を取り除くことができ満足です。

Imageデータ型はByte型のArrayだから
バイト配列に変換する必要があるのですね。

今後ともアドバイスよろしくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)