💡
C# の DataTable は DB ではない
C# には、
DB ではないが テーブルのように行と列を持つデータ構造 が存在する。
それが DataTable である。
DataTable とは?
DataTable は メモリ上に存在するテーブル構造 を表すクラスだ。
- 列(Column)
- 行(Row)
- 列ごとに型を指定できる
見た目は DB に近いが、DB そのものではない。
var table = new DataTable();
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "Alice");
table.Rows.Add(2, "Bob");
DataTable はどこに存在するのか?
- DB ❌
- ファイル ❌
- ネットワーク ❌
アプリケーションのメモリ上にのみ存在する。
プロセスが終了すれば、データも失われる。
DataTable はどんな場面で使われるか?
- DB の検索結果を 一時的に加工したいとき
- Grid / Table 系の UI にバインドするとき
- ADO.NET ベースのレガシーコード
- 列構造が動的に変わるデータ を扱うとき
特に、「テーブル構造そのもの」が重要なケースで使われる。
List<T> との違い
| 項目 | DataTable | List<T> |
|---|---|---|
| 構造 | 行 / 列 | オブジェクトの集合 |
| 型 | 実行時に決まる | コンパイル時に決まる |
| 可読性 | 低め | 高い |
| LINQ | 制限あり | 非常に使いやすい |
ビジネスロジックでは List<T> の方が適している 場合が多い。
今でも DataTable を使うべきか?
- 新規開発:❌(List / Entity を推奨)
- レガシー保守:⭕
- テーブル構造が主役の処理:⭕
DataTable は「古いから悪い」のではなく、
用途が明確な型 だと言える。
まとめ
- DataTable は DB ではない
- メモリ上のテーブル構造である
- 一時データや UI バインディングに向いている
- ビジネスロジック中心のコードでは注意が必要
Discussion