Domain Service Classを利用してコードからデータベースにバイナリデータを追加する
◇事前に下記の内容を見ておくと良いでしょう。
◇ちょっと長くなってしまったので、そのうち分けるかも。
- Domain Service Classを利用してコードからデータベースにバイナリデータを追加する
- 1.画面の作成
- 2.ボタンのクリックイベントの追加(1)
- 3.ボタンのクリックイベントの追加(2)
- 4.ファイルを開く処理のコーディング(1)
- 5.ファイルを開く処理のコーディング(2)
- 6.ファイル(バイナリ)をデータベースに登録する処理のコーディング(1)
- 7.ファイル(バイナリ)をデータベースに登録する処理のコーディング(2)
- 8.事前のデータベースの確認(1)
- 9.事前のデータベースの確認(2)
- 10.アプリケーションの実行(1)
- 11.アプリケーションの実行(2)
- 12.アプリケーションの実行(3)
- 13.アプリケーションの実行(4)
- 14.登録後のデータベースを確認(1)
- 15.登録後のデータベースを確認(2)
- 16.データベースからファイルを取り出して確認(1)
- 17.データベースからファイルを取り出して確認(2)
- 18.データベースからファイルを取り出して確認(3)
- 19.おまけ ―やってはいけない確認方法(1)
- 20.おまけ ―やってはいけない確認方法(2)
1.画面の作成
コントロールを配置して画面から値を設定できるようにします。
また、ファイルをデータベースに登録するので、ファイルを開くためのボタンも用意。
ファイル名はプログラムで取得するようにするので、「txtFileName」のプロパティで、「その他」>>「IsReadOnly」にチェックを入れます。
今回は、下記のようにしてみました。
また、ファイルをデータベースに登録するので、ファイルを開くためのボタンも用意。
ファイル名はプログラムで取得するようにするので、「txtFileName」のプロパティで、「その他」>>「IsReadOnly」にチェックを入れます。
今回は、下記のようにしてみました。
コントロール | 名前 | オプション | 概要 |
Label | lblID | - | ただのラベル |
Label | lblFileName | - | ただのラベル |
TextBox | txtID | - | カラムidの値を入力 |
TextBox | txtFileName | IsReadOnly | カラムfilenameの値,ファイル名は自動取得 |
Button | btnOpenFile | - | ファイルを開く処理 |
Button | btnInsert | - | データをデータベースに追加する処理 |
2.ボタンのクリックイベントの追加(1)
ボタン「btnOpenFile」と「btnInsert」について、各々ダブルクリックして、ボタンのクリックイベントを追加します。
3.ボタンのクリックイベントの追加(2)
クリックイベントが追加されたコードはこんな感じ。
4.ファイルを開く処理のコーディング(1)
まず、ファイルを開くダイアログを使ってファイルを開く処理を記述していきます。
「btnOpenFile」と「btnInsert」の両方のクリックイベントでファイルデータを扱えるように、ファイルデータを保持するメンバー変数として、
「btnOpenFile」と「btnInsert」の両方のクリックイベントでファイルデータを扱えるように、ファイルデータを保持するメンバー変数として、
System.IO.Stream m_stream;
を記述します。
5.ファイルを開く処理のコーディング(2)
「btnOpenFile」のクリックイベントにファイルを開く処理を記述。
- インスタンス準備
- ファイルを開くダイアログの準備
- ファイルを開くダイアログを表示(ここでユーザーがデータベースに登録するファイルを選択する)
- ファイルを開いてファイルのデータと名前を取得
という流れになります。
実際のコードはこんな感じ。
実際のコードはこんな感じ。
// インスタンス準備 OpenFileDialog ofd = new OpenFileDialog(); // オプション設定 ofd.Filter = "All Files (*.*)|*.*"; // 全てのファイル ofd.FilterIndex = 1; // フィルタは1番目を選択(インデックス番号は1~) ofd.Multiselect = false; // 選択可能なファイルは1つだけ // ここでファイルを開くダイアログが画面で表示される // ユーザーが操作した結果を格納する bool? bOK = ofd.ShowDialog(); // ダイアログの結果がOKだった場合 if (bOK == true) { // ファイルを開いてStreamに格納 // 後でファイルを閉じる必要がある m_stream = ofd.File.OpenRead(); // ファイル名を取得してTextBoxに格納 this.txtFileName.Text = ofd.File.Name; }
6.ファイル(バイナリ)をデータベースに登録する処理のコーディング(1)
つづいて、データベースに追加する処理を記述します。
データベースにアクセスするために、Domain Service Classを利用できるように、インポートを行います。
これは、ADO.NET Entity Data Modelの作成とか、Web Serviceの作成とかで作成したものを利用します。
データベースにアクセスするために、Domain Service Classを利用できるように、インポートを行います。
これは、ADO.NET Entity Data Modelの作成とか、Web Serviceの作成とかで作成したものを利用します。
using Connect[[MySQL]].Web;
と記述します。
7.ファイル(バイナリ)をデータベースに登録する処理のコーディング(2)
「btnInsert」のクリックイベントを記述します。
- インスタンス準備
- テーブルにデータを格納
- データベースに追加
- コミット
という流れが基本になりますが、ファイルをデータベースに登録する場合、バイト配列形式にデータ変換する必要があるので、最初に行います。
また、ファイルが開きっぱなしなので、最後に閉じてあげます。
ということを考慮するとコードはこんな感じ。
また、ファイルが開きっぱなしなので、最後に閉じてあげます。
ということを考慮するとコードはこんな感じ。
// ファイルが開いていたら? if (m_stream.Length > 0) { // Stream形式のファイルデータをバイト配列形式のデータに変換する int len = (int)m_stream.Length; byte[] data = new byte[len]; m_stream.Read(data, 0, len); // DBアクセスとテーブルのインスタンスを用意 ConnectMySQL.Web.DomainServiceClass dsc = new ConnectMySQL.Web.DomainServiceClass(); ConnectMySQL.Web.table2 t2 = new ConnectMySQL.Web.table2(); // テーブルにデータを格納 t2.id = int.Parse(txtID.Text); t2.filename = txtFileName.Text; t2.filedata = data; // データベースに追加 // その前に既存データをチェックした方が良いでしょう dsc.table2s.Add(t2); // コミット dsc.SubmitChanges(); // ファイルを閉じる // いろいろな操作を考えると本当はここ以外でもファイルを閉じるが必要かと m_stream.Close(); }
8.事前のデータベースの確認(1)
コーディングが終わったら、MySQL Workbenchを使って現在のテーブルを確認しましょう。
MySQL Workbenchでデータベースを開いたら、対象とするテーブルで右クリックメニューを開き、「Edit Table Data」をクリック。
MySQL Workbenchでデータベースを開いたら、対象とするテーブルで右クリックメニューを開き、「Edit Table Data」をクリック。
9.事前のデータベースの確認(2)
表でテーブルの中身を確認することができます。
現在は空ですね。
現在は空ですね。
10.アプリケーションの実行(1)
では、作成したアプリをビルドして実行してみます。
11.アプリケーションの実行(2)
「ID」に適当な値を入力して、「Open File」ボタンをクリック。
今回「ID」には、
今回「ID」には、
1
を入力しました。
12.アプリケーションの実行(3)
ファイルを開くダイアログが表示されます。
適当なファイルを選択して開きます。
とりあえず画像ファイルを開いてみます。
適当なファイルを選択して開きます。
とりあえず画像ファイルを開いてみます。
13.アプリケーションの実行(4)
「File Name」に開いたファイル名が表示されていることが確認できます。
続いて「Insert」ボタンをクリック。
これでファイルデータなどがデータベースに追加されたはずです。
続いて「Insert」ボタンをクリック。
これでファイルデータなどがデータベースに追加されたはずです。
14.登録後のデータベースを確認(1)
再び、MySQL Workbenchに戻って確認してみましょう。
更新ボタン(赤枠でかこってあるボタン)をクリックすると表示が更新されます。
更新ボタン(赤枠でかこってあるボタン)をクリックすると表示が更新されます。
15.登録後のデータベースを確認(2)
先ほど開いたファイルが登録されています。
ファイルデータ自体は、言葉で表現できないので「BLOB」という表記になっています。
ファイルデータ自体は、言葉で表現できないので「BLOB」という表記になっています。
16.データベースからファイルを取り出して確認(1)
追加したファイルデータは本当に大丈夫か?という確認をしたいので、データベースから取り出してみましょう。
「BLOB」となっている所で、右クリックメニューを表示して、「Save Value To File」をクリックします。
「BLOB」となっている所で、右クリックメニューを表示して、「Save Value To File」をクリックします。
17.データベースからファイルを取り出して確認(2)
ファイル名に拡張子も付けて保存します。
18.データベースからファイルを取り出して確認(3)
保存したフォルダを確認すると、確かに大丈夫そうだということが確認できます。
19.おまけ ―やってはいけない確認方法(1)
データベースに何か登録したときの確認方法として、コマンドラインが基本になると思いますが、ファイルを登録した場合はやめた方が無難でしょう。
へたにselect文なんかを実行してしまうと……
へたにselect文なんかを実行してしまうと……
20.おまけ ―やってはいけない確認方法(2)
登録したバイナリデータがダラダラ表示されて大変なことに。