Skip to content

MS_TableAdapter

nishi_74322014 edited this page Aug 18, 2026 · 1 revision

TableAdapter

概要

DataAdapter:データ・アダプタ構成ウィザードと大きな差はないが、
TableAdapter:テーブル・アダプタ構成ウィザードは、
型付き DataSetDataAdapter が統合されたような構造になっている。

  • このため TableAdapter では、型付き DataSetDataTable 必須となっている。

  • 画面に TableAdapter を D&D し、テーブル・アダプタ構成ウィザードを起動、

  • クエリビルダを使用して SELECT クエリを作成し、

  • そこから Insert、Update、Delete の各種メソッドを自動生成できる。

補足(TableAdapter の実体): TableAdapter
ADO.NET のクラスではなく、Visual Studio のデザイナが生成するコードである。
System.DataTableAdapter という型は存在せず、
*.xsd から自動生成された
partial class XxxTableAdapter(内部に SqlDataAdapter を保持)が実体になる。

このため、

  • デザイナ(*.xsd)が無いと生成・保守できない
  • 生成コードは *.Designer.cs に出力され、直接編集すると再生成で失われる
    (拡張は partial class 側に書く)

という性質を持つ。

補足(TransactionScope が必要になる理由): 本文にあるとおり、
TableAdapter自前でトランザクションを共有する手段を持たない
(内部の SqlConnectionTableAdapter ごとに独立しているため)。

ただし、TransactionScopeで括ると
接続が 2 つ開くため MS-DTC への昇格が発生しうる点に注意。
回避するには、生成コードの Connection プロパティに
同一の SqlConnection を設定して接続を共有する。

using var cn = new SqlConnection(cs);
cn.Open();
using var tx = cn.BeginTransaction();

adapter1.Connection = cn;
adapter1.Transaction = tx;   // partial class 側で公開しておく
adapter2.Connection = cn;
adapter2.Transaction = tx;
// ...
tx.Commit();

Transaction プロパティは自動生成されないため、
partial class 側に自分で用意する必要がある。

補足(最新化): TableAdapter
.NET Framework の Windows フォーム / Web フォーム開発専用で、
.NET Core 以降にはデザイナ サポートが無い
新規開発では使用せず、既存資産の保守に限る。

移行先の考え方は
ADO.NET vs ORM (Entity Framework, Dapper)を参照。
元ページも「今となっては、中途半端で、あまり利用されていない」と
評している技術である。

参考


Tags: 移行, データアクセス, .NET開発, ADO.NET

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally