C# Visual Studio

【Visual Studio 2022】DataSetの基礎知識

本記事では、SQL Server Management Studio(SSMS)を使用し、データベースを直接操作する手順を解説します。

データベースやテーブルの新規作成から、SQL文を用いたデータの登録・検索・更新といった基本操作を行い、データベース管理の基礎スキルを習得しましょう。


DataSetとは

DataSet (データセット)は、ADO.NET に用意されている仕組みのひとつで、C# で作成するアプリケーションにおいて、データベースから取得したデータを、パソコンのメモリ上に保存して扱うためのコンポーネントです。

Windows フォームアプリケーション開発では、データベースから取得したデータを DataSet に読み込み、画面に表示したり処理したりする ためによく利用されます。

DataSet は単にデータを保存するだけでなく、テーブル同士の関連(リレーション)や制約(主キーなど) も一緒に保持できるため、データベースの構造をそのままアプリケーション内で扱うことができます。

DataSetは、主に以下のクラスで構成されています。

クラス概要
DataSet・複数のテーブル(DataTableクラス)をまとめて管理するクラス
・データベース全体を表現するイメージ
DataTable・1つのテーブルに相当するクラス
・レコード(DataRowクラス)とカラム(DataColumnクラス)を管理するクラス
DataRow・テーブルの1レコードを表現するクラス
DataColumn・テーブルのカラム定義(列名、データ型)を表現するクラス

TableAdapterとは

TableAdapter(テーブルアダプタ)とは、データベースと DataSet をつなぐ役割を持つコンポーネントです。
データベースのテーブルに対して SELECT文を実行し、取得した複数のレコードを DataSet 内の DataTable に格納する機能を持っています。

またTableAdapterは、ユーザーの操作によって追加・編集・削除された データをデータベースへ反映するために、INSERT 文、UPDATE 文、DELETE 文を実行する役割も担います。
さらに、「レコード件数を取得したい」などの用途に応じて、独自の SELECT 文をTableAdapterに追加し、それをメソッドとして呼び出すことも可能です。


BindingSourceとは

BindingSource(バインディングソース)とは、データソース(DataSet など)と画面部品(DataGridViewなど)を橋渡しするためのコンポーネントです。
データのやり取りをこのコンポーネントが一括管理することで、並べ替えやフィルタリング、ユーザー操作(行の選択状態など)への柔軟な対応が可能になります。


データを表示する一連の流れ

これまで説明したDataSet、TableAdapter、BindingSourceを組み合わせることで、データベースの情報を画面部品(DataGridViewなど)へスムーズに表示できます。その一連のステップは以下の通りです。

①TableAdapterがデータベースに対して SELECT 文を実行し、必要なデータを取得します。

②データベースから取得したデータは DataSet 内の DataTable に格納されます。

③BindingSource が DataTable のデータを参照し、画面表示用に整理・管理します。

④DataTableの内容が変更されると、BindingSource が画面部品にデータが変更されたことを通知します。

⑤画面部品が BindingSource からデータを受け取り、画面に表示します。


実践:DataSetを使ったアプリケーションの作成

完成イメージ

DataSet、TableAdapter、BindingSourceを組み合わせて、ボタンをクリックするとデータベースの情報をDataGridViewへ表示するアプリケーションを作成します。

データベース

本演習では、前の記事で作成したデータベース「社員情報DB」をそのまま使用します。

プロジェクト

・テンプレート:Windowsフォームアプリケーション(.NET Framework)
・言語:C#
・フレームワーク:.NET Framework 4.8

DataSet・DataTable・TableAdapterの作成

1. ソリューションエクスプローラーのプロジェクトを右クリックして、「追加 > 新しい項目」をクリックします。

2. 「DataSet」を選択し、「追加」をクリックします。

3. ソリューションエクスプローラーの「DataSet1.xsd」をダブルクリックします。

4. 作業領域にDataSetのデザイナーが表示されます。

5. メニューバーの「表示 > サーバーエクスプローラー」をクリックし、サーバーエクスプローラーを表示します。

6. サーバーエクスプローラーの「データ接続」を右クリックし、「接続の追加」をクリックします。

7. 以下を入力し、「OK」をクリックします。

・サーバー名:localhost
・認証:SQL Server 認証
・ユーザー名:sa
・パスワード:※SSMSでsaユーザーでログインする際に使用するパスワードと同様
・暗号化:Mandatory(True)
・サーバー証明書を信頼する:チェック有
・データベース名の選択または入力:社員情報DB

8. サーバーエクスプローラーの「データ接続 > 〇〇〇.社員情報DB.dbo > テーブル」の「社員マスタ」をDataSetデザイナーへドラッグ&ドロップで配置します。

画面の作成

1. ソリューションエクスプローラーの「Form1.cs」をダブルクリックし、Form1のデザイナーを開きます。

2. ツールボックスからドラッグ&ドロップで「BindingSource」をフォームへ配置します。

3. フォームへ配置した「BindingSource」はFormデザイナーの下部に表示されます。

4. フォームへ配置した「BindingSource」を選択し、プロパティ値を以下のように変更します。

・DataMember:社員マスタ
・DataSource:dataSet1

必ず DataSource → DataMember の順で設定してください。先に DataSource を指定しないと、DataMember の選択肢にテーブル名が表示されません。

DataSourceの選択
プロパティ値
DataMenberの選択

5. 「BindingSource」のプロパティ値を上記のように変更することで、Formデザイナーの下部に「dataSet1」と「社員マスタTableAdapter」が自動で追加されます。

6. ツールボックスからドラッグ&ドロップで「Button」と「DataGridView」をフォームへ配置します。

7.フォームへ配置した「DataGridView」を選択し、プロパティ値を以下のように変更します。

・DataSource:bindingSource1

8.フォームへ配置した「DataGridView」を選択し、プロパティ値を以下のように変更します。

・Text:データ表示

以上で画面の作成は完了です。
(フォームのサイズやラベルとボタンの位置などのデザインは自由に調整してください。)

処理の実装

Form1クラスの処理を以下のように実装してください。

C#
using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.社員マスタTableAdapter.Fill(this.dataSet1.社員マスタ);
        }
    }
}
実行・動作確認

作成したアプリケーションを実行し、想定通りに動作するか確認してみましょう。

1. アプリケーションを起動します。

2. 「データ表示」ボタンをクリックし、データベース「社員情報DB」の「社員マスタ」のデータが表示されることを確認します。

完成イメージ通りに動作すれば、データ表示アプリケーションの作成は完了です。


次の記事へ


あなたをプロにすることを約束します。

アルチテックのインターンシップはハイレベル。

現役のシステムエンジニアがマンツーマン指導

市場価値が高い産業系システムエンジニアを目指そう!

インターンシップの募集はこちら

-C#, Visual Studio
-, , ,