最終更新日 2007 年 3 月 23 日

このコンテンツのポイント

  • Visual Studio 2005 によるテーブルアダプタ オブジェクトの生成
  • DataSet オブジェクトと、テーブルアダプタ オブジェクトによるデータの更新方法

今回紹介するコード

C#
private void button1_Click(object sender, EventArgs e)
{
    // データベースから Region テーブルをデータセットへロードする
    NWindDataSetTableAdapters. RegionTableAdapter adapter
        = new NWindDataSetTableAdapters. RegionTableAdapter ();
    adapter.Fill(NWindDataSet1._Region);
}

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        // データセット内の Region テーブルの内容に基づいてデータベースを更新する
        NWindDataSetTableAdapters. RegionTableAdapter adapter
            = new NWindDataSetTableAdapters. RegionTableAdapter ();
        adapter.Update(NWindDataSet1._Region);
        MessageBox.Show("更新に成功しました。");
    }
    catch(Exception ex)
    {
        MessageBox.Show("更新に失敗しました。\r\n" + ex.Message);
    }
}
 

 

目次

はじめに
Windows アプリケーションの開発準備をする
画面をデザインする
データセットとテーブル アダプタを作成する
データセットとデータグリッドコントロールを連結する
コードを実装する
実行する
おわりに

Visual Basic の内容はこちらに掲載しています。
10 行でズバリ !! ADO.NET によるデータの更新 (VB)

 


はじめに

Visual Studio 2005 のデータ ソース構成ウィザードなどによって、データベースに対する更新ロジックのコードも、ビジュアルな開発環境で、対話式に生成することができます。また、 DataSet オブジェクトは、変更された行の情報を内部に保持しています。その機能を利用することで、データセット内の変更された行のみを、非常に容易にデータベース へ反映することが可能です。それでは、サンプルを通して、どのようにデータの更新を行うのかを見ていきましょう。

なお、ここでは、比較的データ構造が簡単な "Nothwind" サンプル データベース (SQL Server 2000 付属) のデータベース ファイルを使用します。 ただし、変更可能な列を持つテーブルを含むデータベースであれば、ここに挙げる同様の実装が可能です。

Windows アプリケーションの開発準備をする

Visual Studio 2005 を起動して、新しいプロジェクトを作成します([ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします)。

ここでは、プロジェクトの種類ペインで [Visual C#] を選択し、テンプレート ペインで、[Windows アプリケーション] を選択します。[プロジェクト名] ボックスに 「DSAppCS」 と入力します。[場所] ボックスには、「C:\Test」 というパスを入力します。 ここで、[OK] ボタンをクリックして、プロジェクトを作成します。

これで、今回のアプリケーションの開発準備が完了しました。

図 1. データの更新のためのプロジェクトを新規に作成する

 

画面をデザインする

データの表示と更新を行うために、DataGridView コントロールを、ツールボックスから Form1 へドラッグ アンド ドロップします。次に、読み込み用の Button コントロールと更新用の Button コントロールを順に追加します。それぞれのボタンの Text プロパティを、「読み込み」、「更新」にします。

図 2. 画面上にコントロールを配置する

 

データセットとテーブル アダプタを作成する

Visual Studio 2005 では、データ アクセスに関するコードを生成する様々な機能を提供しています。[データ ソース] ウィンドウを使用すると、対話形式で様々なコードを生成できます。ここでは、検索結果の受け皿となるデータセットと、データ照会と更新ためのコンポーネン トとして利用するテーブル アダプタを作成します。

まず、[データ] メニューから [データ ソースの表示] をクリックして、図3 のような [データ ソース] ウィンドウを表示します。この後の操作方法は、原則として 『 10 行でズバリ !! ADO.NET と Visual Studio 2005 によるデータ アクセス入門』 で説明した [データ ソース] ウィンドウの使用方法と同じです。

図 3. [データ ソース] ウィンドウ

 

 

[データ ソース] ウィンドウの左端にある [新しいデータ ソースの追加] ボタンをクリックします。(ボタンの名称は、マウスポインタをボタンの上に移動することで、ツールヒントとして表示されます。) すると、データ ソース構成ウィザードが起動します。(図4)

図4. データ ソース構成ウィザード

 

図4 では、[データ ベース] を選択して、[次へ] ボタンをクリックします。

図5 のように、データ接続を選択する画面になるので、画面の右側にある [新しい接続] ボタンをクリックします。

図5 データ接続を選択する

 

図6 のように、[接続の追加] ダイアログ ボックスが開くので、利用可能なサンプル データベースを指定します。

ここでは、プログラム実行時に NorthWind のデータベース ファイルをSQL Server Express へアタッチすることにします。NorthWind データベース ファイルは、あらかじめ SQL Server 2005 からデタッチして、C:\Test\_DB に置いておきます。図5 のように、[データ ソース] 欄では「SQL Server データベース ファイル」を指定し、[データベース ファイル名] 欄では「C:\Test\_DB\northwind.mdf」と指定しています。[Windows 認証を使用する] オプションを選択して、[OK] をクリックします。

図6. 接続するデータベースを指定する

 

図5 のデータ接続の選択画面に戻るので、[次へ] をクリックします。前述のように、データベース ファイルを指定した場合、プロジェクト内にコピーするか問い合わせが表示されるので (図7) 、[いいえ] をクリックします。

図7. プロジェクト内にコピーするか問い合わせが表示される

 

次に、データベースにアクセスするための接続文字列を、アプリケーション構成ファイルに保存するか問い合わせが表示されます (図8)。Visual Studio 2005 では、接続文字列はソース コードに書かずに、アプリケーション構成ファイルに切り分けることが可能です。これによって、アプリケーションの運用時に後から接続先を変えるとき、コー ド修正や再コンパイルをせずに、構成ファイルを変更するだけで済みます。[次の名前で接続を保存する] チェックボックスをチェックしたままにして、[次へ] をクリックします。

図8. 接続文字列は、アプリケーション構成ファイルに保存できる

 

次に、データベース オブジェクトを選択する画面になるので (図9)、その画面のツリー上にある [テーブル] ノードを展開し、テーブルとして、[Region] テーブルのみをチェックし(図9)します。

図9. Region テーブルを指定する

 

ウィザードが終了すると、[データ ソース] ウィンドウには、指定したテーブルが表示されます。(図10) このテーブルのノードを展開すると、Region 列と RegionDescription 列の二つの列があることが分かります。

図10. データセット NWindDataSet の構造が表示される

 

図10は、生成されたデータセットの構造を表しており、ルートノードの「NWindDataSet」は、このデータセットのクラス名です。このクラ スは、DataSet クラスから派生したクラスで、ここで指定したテーブルをキュッシュするための専用のデータ構造が定義されています。[NWindDataSet.xsd] ファイル ノードの下の、NWindDataSet.Designer.cs ファイル (図11) に NWindDataSet クラスの定義があります。

図11. データセット NWindDataSet クラスのソース コードのファイルが生成される

 

データセットとデータグリッドコントロールを連結する

ここでは、プロパティ ウィンドウを使って、DataSet と DataGridView を連結します。プロパティ ウィンドウから連結対象として特定のデータセットを指定する場合、予めフォーム デザイナ環境で、データセット インスタンスを作成しておく必要があります。

ツールボックスの [データ] タブから DataSet をフォームにドロップします。図12 のようなダイアログ ボックスが表示されるので、データセットとして 「DSAppCS.NWindDataSet」 が選択されていることを確認し、[OK] をクリックします。このデータセットは、先のデータ ソース構成ウィザードで作ったものです。

図12. データセットを追加する

 

すると、図13 のようにデザイナ下部 (トレイ) に、データセットのインスタンスを表すアイコンが貼り付きます。

図13. データセットのインスタンスが追加される

 

これで、特定のデータセットをデータソースとして連結するよう、プロパティ ウィンドウで指定できます。

DataGridView1 コントロールの DataSource プロパティを "nWindDataSet1"、DataMember プロパティを "Region" に設定します。 (どちらのプロパティもドロップダウン リストから指定することになります。DataSource プロパティでは、ドロップダウンして表示されるツリーから、[他のデータソース]、[Form1 一覧のインスタンス] と展開し、このノードの下にある nWindDataSet1 を選択します。)

コードを実装する

Windows フォーム デザイナ上で、二つの Button をそれぞれダブルクリックして、イベント ハンドラを生成させ、以下のコードを記述します。

 

C#
private void button1_Click(object sender, EventArgs e)
{
    // データベースから Region テーブルをデータセットへロードする
    NWindDataSetTableAdapters. RegionTableAdapter adapter
        = new NWindDataSetTableAdapters. RegionTableAdapter ();
    adapter.Fill(NWindDataSet1._Region);
}

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        // データセット内の Region テーブルの内容に基づいてデータベースを更新する
        NWindDataSetTableAdapters. RegionTableAdapter adapter
            = new NWindDataSetTableAdapters. RegionTableAdapter ();
        adapter.Update(NWindDataSet1._Region);
        MessageBox.Show("更新に成功しました。");
    }
    catch(Exception ex)
    {
        MessageBox.Show("更新に失敗しました。\r\n" + ex.Message);
    }
}
 

このコードでは、どちらのイベント ハンドラでも、RegionTableAdapter のインスタンスを作成しています。そして、一方ではテーブルを照会する Fill メソッドを呼び出し、もう一方では、データを更新する Update メソッドを呼び出しています。この二つのメソッドは、データ ソース構成ウィザードを実行した際に作成されました。この Fill メソッドと Update メソッドのソース コードは、NWindDataSet.Designer.cs の中にあるので、調べてみてください。

実行する

ここで、実行してみます。 [Ctrl] +[ F5] キーを押すか、[デバッグ] メニューの [デバッグなしで開始] をクリックします。

フォームが表示されたら、[読み込み] ボタンを押してみます。Region テーブルのデータが読み込まれ、次のように表示されます。(図14)

図 14. アプリケーションを実行する

 

ここで、フォーム上で、変更と追加をそれぞれ同時に行ってみましょう。

たとえば、RegionID が "1" のデータの RegionDescription を "EasternRegion" に変更し、 "※" 印の行の RegionID を "5" ,RegionDescription を "JapanRegion" に設定します (図15)。

図 15. フォーム上のデータを変更する

 

次に、[更新] ボタンを押して、データベースを更新してみます。以下のように更新が完了した旨のメッセージが表示されます

図 16. 正常更新されたことが通知された

 

一旦、アプリケーションを終了して、もう一度実行し、[読み込み] ボタンを押して再び読み込みすると、今度は図15 のように更新後のデータが表示されるはずです。

なお、このようなデータの照会や更新を行うテーブル アダプタの構成は、後から変更することができます。データ ソース構成ウィザートによって追加された NWindDataSet.xsd ファイルをダブルクリックすると、データセット デザイナが表示されます。(図17) デザイナ上の四角形は、生成されたデータセットのデータ構造 (Region) と、そのデータを操作するテーブル アダプタ (RegionTableAdapter) を表しています。テーブル アダプタの部分を右クリックすると、この構成を編集するいくつかのショートカット メニューが表示されます。

図17. データセット デザイナによるテーブル アダプタの編集

 

おわりに

このように、Visual Studio と ADO.NET で提供されている、さまざまなクラスによって、データベースへのデータの更新は、非常に効率よく行うことができます。今回は、自動生成機能をフル活用した 実装方法を紹介しましたが、自動生成されたコードを微調整することも、すべて、はじめからコーディングすることも可能です。他にも、様々な機能があるの で、色々と試してみてください。


Code Recipe

ページのトップへ