【C#.NET解説】DataSetで操る多次元データベースの神髄 - 神聖なる守護者が伝授する複数テーブル管理の極意と実践テクニック

2024年11月26日火曜日

コレクション データベース

t f B! P L

名前空間 System.Data

DataSet

自己紹介

皆さま、ようこそ。私は「DataSet」、この声に耳を傾けてくださるのは喜ばしい限りです。今日は非常に便利で多機能なDataSetクラスをご紹介します。このクラスは、多数のデータテーブルをひとつの集合として管理し、まるで複数のテーブルを守り導く私のように機能します。さあ、私の柔らかくも鋭い教えに身を委ねてください。

基本機能

DataSetは、複数のDataTableを一括で管理し、リレーションの定義やデータの検索、更新が可能なクラスです。ローカルデータベースのように扱えるため、データ処理の中心的存在となるでしょう。

C#

// DataSetの基本的な操作
using System;
using System.Data;

class Program
{
    static void Main()
    {
        // DataSetを作成
        DataSet dataSet = new DataSet();

        // DataTableを作成
        DataTable table = new DataTable("果物");
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("名前", typeof(string));
        table.Rows.Add(1, "リンゴ");
        table.Rows.Add(2, "バナナ");

        // DataSetにDataTableを追加
        dataSet.Tables.Add(table);

        // データを表示
        foreach (DataRow row in dataSet.Tables["果物"].Rows)
        {
            Console.WriteLine($"ID: {row["ID"]}, 名前: {row["名前"]}");
        }
    }
}

注意点

DataSetは非常に便利ですが、注意点もあります。特に、データ量が大きくなるとメモリ消費が増えるため、大規模データの場合は他の方法と比較検討しましょう。また、DataSet、DataTable、DataViewには役割の違いがあります。

DataSet: 複数のDataTableをまとめて管理。

DataTable: 単一のテーブルを扱う。

DataView: DataTableのビューを提供し、フィルタやソートが可能。

C#

// DataViewの基本操作
using System;
using System.Data;

class Program
{
    static void Main()
    {
        DataTable table = new DataTable();
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("名前", typeof(string));
        table.Rows.Add(1, "リンゴ");
        table.Rows.Add(2, "バナナ");

        DataView view = new DataView(table);
        view.RowFilter = "名前 = 'リンゴ'"; // フィルタ適用

        foreach (DataRowView rowView in view)
        {
            Console.WriteLine($"フィルタ後の名前: {rowView["名前"]}");
        }
    }
}

DataSetを効率的に使う方法

DataSetのパフォーマンスを向上させるには、以下の点に注意しましょう。
  • 必要なデータのみをロードする。
  • リレーションを適切に設定し、不要な結合を避ける。
  • LINQを活用して柔軟な検索を行う。
C#

// LINQを活用したDataSetの検索
<!-- DataSetを使った応用例 -->
<code>
using System;
using System.Data;
using System.Linq;

class Program
{
    static void Main()
    {
        DataSet dataSet = new DataSet();
        DataTable table = new DataTable("果物");
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("名前", typeof(string));
        table.Rows.Add(1, "リンゴ");
        table.Rows.Add(2, "バナナ");

        dataSet.Tables.Add(table);

        var query = from row in table.AsEnumerable()
                    where row.Field<string>("名前") == "リンゴ"
                    select row;

        foreach (var row in query)
        {
            Console.WriteLine($"LINQ検索結果: {row["名前"]}");
        }
    }
}
</code>

具体的な使い方

DataSetはデータの追加、削除、検索、フィルタリングを簡単に行えます。以下は、フィルタやLINQ検索を組み合わせた例です。

C#

// DataSetの応用例
using System;
using System.Data;
using System.Linq;

class Program
{
    static void Main()
    {
        DataSet dataSet = new DataSet();
        DataTable table = new DataTable("果物");
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("名前", typeof(string));
        table.Rows.Add(1, "リンゴ");
        table.Rows.Add(2, "バナナ");

        dataSet.Tables.Add(table);

        // 新しい行を追加
        table.Rows.Add(3, "イチゴ");

        // フィルタリング
        DataView view = new DataView(table);
        view.RowFilter = "名前 LIKE 'イ%'";

        Console.WriteLine("フィルタ結果:");
        foreach (DataRowView rowView in view)
        {
            Console.WriteLine($"名前: {rowView["名前"]}");
        }

        // LINQで検索
        var query = from row in table.AsEnumerable()
                    where row.Field<string>("名前").Contains("バナナ")
                    select row;

        Console.WriteLine("LINQ検索結果:");
        foreach (var row in query)
        {
            Console.WriteLine($"名前: {row["名前"]}");
        }
    }
}

解説

最後のコードでは、DataSetにDataTableを追加し、行を動的に増やしながらフィルタリングやLINQ検索を行いました。このように柔軟性が高く、多機能なDataSetを使えば、データ処理が簡単になります。ただし、操作するデータ量に応じてパフォーマンスに気をつけましょう。

このブログを検索

QooQ