1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

c# 画像をバイナリーデータとしてDBに保存する

Posted at

DBに画像をバイナリーデータで保存する必要があったためのメモです。
なんだかんだ初ですのでちょっと沼りました。
ただの技術メモなのでご了承下さい。

使用DBはPostgreです。

それでは早速
下記が画像をDBに突っ込む過程です。

Bitmap bmp = new Bitmap(@"C:¥sample.jpg");
MemoryStream ms = new MemoryStream();
bmp.Save(ms,ImageFormat.jpeg);
byte[] binaryData = ms.ToArray();
NpgsqlCommand cmd = new NpgsqlCommand();
cmd.Connection = 環境にあった設定
cmd.CommandText = ("INSERT INTO TableName (Column) VALUES (:binaryData)");
NpgsqlParameter param = cmd.Parameter,Add("binaryData",NpgsqlDbType.Bytea);
param.Value = binaryData;
cmd.ExecuteNonQuery();

Bitmap bmp = new Bitmap(@"C:¥sample.jpg");
Bitmapの引数に画像の場所を指定します。

MemoryStream ms = new MemoryStream();
メモリを使って読み取りなどできるやつです。

bmp.Save(ms,ImageFormat.jpeg);

Save(Stream, ImageFormat)
このイメージを、指定した形式で指定したストリームに保存します。

らしいですね。
バイナリーデータに変換します。

byte[] binaryData = ms.ToArray();
バイナリーデータを取り出します。

cmd.CommandText = ("INSERT INTO TableName (Column) VALUES (:binaryData)");
NpgsqlParameter param = cmd.Parameter,Add("binaryData",NpgsqlDbType.Bytea);
param.Value = binaryData;

こちらについてはルールっぽい?
sql実行するための準備ですね。
https://www.postgresql.jp/document/9.4/html/datatype-binary.html
絶賛学習中です。

cmd.ExecuteNonQuery();
sql実行。

続いて、バイナリーデータから画像表示です。

MemoryStream ms = new MemoryStream(binaryData);
Bitmap bm = new Bitmap(ms);
PictureBox.image = bm;

MemoryStream ms = new MemoryStream(binaryData);
先ほどのバイナリーデータをMemoryStreamで読んであげます。

Bitmap bm = new Bitmap(ms);
ビットマップに変換してあげます。

PictureBox.image = bm;
これで画像が表示できます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?