C# Programming

Image

画像データベース

開発環境: Visual Studio 2005

1.目次

1.目次
2.目的
3.参考書
4.作成するアプリケーション
5.一覧表示の作り方
6.詳細表示の作り方

2.目的

Visual Studio 2005 では、とても簡単にデータベースアプリケーションができます。その作り方です。

3.参考書

(1) Microsoft SQL Server 2005 Books Online
(2) DBA 向け SQL Server 2005 概要
(3) MSDN:[HOWTO] Visual C# でデータベースから PictureBox コントロールに画像を直接コピーする方法

4.作成するアプリケーション

次のような画像データベースを作成します。
  1. 一覧表示
    Image
  2. 詳細表示
    Image

5.一覧表示の作り方

  1. test というデータベースを作成する。
    サーバーエクスプローラからデータ接続を選択し、testというデータベースを作る。
    Image
  2. C#のWindows アプリケーションプロジェクトを新規作成する。
    Microsoft SQL Server Management Studio で、次のクエリを実行し、Picture_Tテーブルを作成する。 このときIDにはIDENTITY(1, 1)で主キーにします。

    Image

     

  3. そのテーブルをセーブすると、テーブル名を聞いてくるので、Picture_Tという名前で作成する。

  4. データセットを作成する。VS.2005 の [メインメニュー]→[データ]→[新しいデータソースの追加] を選択すると、[データ ソース 構成ウィザード] が表示されるので、

    Image

    データベースを選択して、[次へ]。

  5. データ接続の選択ダイアログが表示されるので、先程作ったデータベースを選択する。
    Image

     

  6. 接続文字列はそのまま。

    Image

  7. データベースオブジェクトの選択で先程作ったテーブルを選択する。

    Image

     

  8. VS.2005 の [メインメニュー]→[データ]→データソースの表示で、次のようにデータソースが作成されていればOK。
    Image
  9. このままだと、Picture に割り当てられるコントロールのフォーマットが 「なし」なので、下図のようにドロップダウンから PictureBoxを選択する。

    Image

     

  10. Picture_TをForm1へドラッグ&ドロップする。すると、DataConnector, TableAdapter, DataNavigator, DataSet を自動的作ってくれて、次のようなWindows Forms が起動できるようになる。標準では、PictureBoxはDataGridViewの列に入れてくれないので、次のようにIDとFileNameしか表示されません。

    Image
  11. そこで、DataGridViewのAdd Column より、Picture を追加します。また、IDは必要ないので、FileNameとPictureだけを表示するようにします。
    Image
  12. 次に、このままだと、画像の一部しか表示されないので、GridViewを右クリックして、[列の編集] を選択して、Picture の ImageLayout プロパティを Zoom にします。これにより、カラムにあわせて画像をズームしてくれるようにします。

    Image

  13. VS2005 beta 1 では、DataNavigator のプラスボタンを押すと、勝手にレコードが追加されてしまって、そのキャンセルができないので、プラスボタンを削除して、新たに Add ボタンを追加します。
    Image
  14. ToolBarStripのAdd ボタンをダブルクリックして、追加ボタンを押した場合のイベントを追加します。ここでは、単にInsertImage()を呼ぶようにします。 
    InsertImage()
    private void dataNavigatorAddNewItem_Click(object sender, EventArgs e)
    {
    	InsertImage();
    }

     

  15. InsertImage()を実装します。ここでは、OpenFileDialogでファイルを選択して、FileStreamで読みだしたファイルを byte[] imageDataに格納します。次に、DataRowを追加して、そのDataRowのFileName, Picture列に、それぞれfilename, imageDataを入力します。最後に、picture_TTableAdapterのUpdateメソッドを呼び出し、データベース側にデータセットが更新されたことを通知してあげます。これで、データベースを更新できます。
    InsertImage()
    private void InsertImage()
    {
    	OpenFileDialog openFileDialog1 = new OpenFileDialog();
    	DialogResult res = openFileDialog1.ShowDialog();
    	if (res == DialogResult.OK)
    	{
    		string filename = openFileDialog1.FileName;
    		// Bitmap bmp = new Bitmap(filename);
    
    		FileStream fileStream = new FileStream(filename, FileMode.Open, 
    			FileAccess.Read);
    		byte[] imageData = new byte[fileStream.Length];
    		fileStream.Read(imageData, 0, imageData.Length);
    		fileStream.Close();
    
    		testDataSet.Picture_T.AddPicture_TRow(filename, imageData);
    		picture_TTableAdapter.Update(testDataSet);
    	}
    }		

     

  16. ここまでで、次のようなアプリケーションができます。
    Image

6.詳細表示の作り方

 
  1. 上記ステップの4で、データ ソース ウィンドウで Picture_T テーブルが表示されていると思いますが、このPitcure_T のドロップダウンリストで、[詳細]を選択します。

    Image
  2. あとは、同様にPicture_TをWindows.Formsにドラッグ&ドロップします。すると、詳細表示でデザイナ以上に配置されます。

    Image
  3. 次に、不要なIDを削除したり、PictureBox のImageLayout プロパティを Zoom にしたり、レイアウトを整えたりします。あとは、同様にAddボタンが押された場合の処理を記述すれば次のようなアプリケーションが出来上がります。

    Image