- test というデータベースを作成する。
サーバーエクスプローラからデータ接続を選択し、testというデータベースを作る。

- C#のWindows アプリケーションプロジェクトを新規作成する。
Microsoft SQL Server
Management Studio で、次のクエリを実行し、Picture_Tテーブルを作成する。
このときIDにはIDENTITY(1, 1)で主キーにします。

- そのテーブルをセーブすると、テーブル名を聞いてくるので、Picture_Tという名前で作成する。
- データセットを作成する。VS.2005 の [メインメニュー]→[データ]→[新しいデータソースの追加]
を選択すると、[データ ソース 構成ウィザード] が表示されるので、

データベースを選択して、[次へ]。
- データ接続の選択ダイアログが表示されるので、先程作ったデータベースを選択する。

- 接続文字列はそのまま。

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

- VS.2005 の
[メインメニュー]→[データ]→データソースの表示で、次のようにデータソースが作成されていればOK。

- このままだと、Picture に割り当てられるコントロールのフォーマットが
「なし」なので、下図のようにドロップダウンから PictureBoxを選択する。

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

- そこで、DataGridViewのAdd Column より、Picture
を追加します。また、IDは必要ないので、FileNameとPictureだけを表示するようにします。

- 次に、このままだと、画像の一部しか表示されないので、GridViewを右クリックして、[列の編集]
を選択して、Picture の ImageLayout プロパティを Zoom
にします。これにより、カラムにあわせて画像をズームしてくれるようにします。

- VS2005 beta 1 では、DataNavigator
のプラスボタンを押すと、勝手にレコードが追加されてしまって、そのキャンセルができないので、プラスボタンを削除して、新たに Add
ボタンを追加します。

- ToolBarStripのAdd
ボタンをダブルクリックして、追加ボタンを押した場合のイベントを追加します。ここでは、単にInsertImage()を呼ぶようにします。
InsertImage() |
private void dataNavigatorAddNewItem_Click(object sender, EventArgs e)
{
InsertImage();
} |
-
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);
}
} |
- ここまでで、次のようなアプリケーションができます。

|