Skip to content

MS_DataAdapter

nishi_74322014 edited this page Aug 18, 2026 · 1 revision

DataAdapter

概要

  • @IT:基礎解説:ADO.NET 基礎講座
    http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html

    • 画面に DataAdapter を D&D し、

    • データ・アダプタ構成ウィザードを起動、

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

    • そこから Insert、Update、Delete の各種 SqlCommand を自動生成できる(修正も可能)。

    • 内部的には CommandBuilder を使用しておりプログラム中からも処理できる。

    • テーブルやビューを DataSet(XSD)上に D&D し、XSD 経由で型付き DataSet を生成する。

    • 型付き DataSet に上記 DataAdapter を使用し(SELECT クエリを実行し)情報を Fill する。

    • 情報を Fill した型付き DataSet は、DataGridDataSource プロパティでバインドできる。

    • DataGrid 経由で更新した DataSet は、Update メソッドから
      InsertCommandUpdateCommandDeleteCommand 経由でデータベースを更新できる。

移行メモ(元ページの状態): 元ページは概要のみで、
「参考」節や Tags 行が無い状態だった。
体裁を _Template.md に合わせ、以下に補記を追加した。

詳細

位置付け

DataAdapterSqlDataAdapter 等)は、
DataSet とデータ ソースの間を仲介するブリッジである。

メソッド 方向 内容
Fill DB → DataSet SelectCommand を実行して結果を DataTable に格納
Update DataSet → DB 各行の RowState に応じて Insert/Update/Delete の各 Command を実行

つまり、ADO.NET非接続型データアクセスを成立させるための部品である。

補足(RowState が更新の駆動源): Update が何を発行するかは、
DataRow.RowState で決まる。

RowState 実行される Command
Added InsertCommand
Modified UpdateCommand
Deleted DeleteCommand
Unchanged 何も実行されない

Update の成功後に AcceptChanges が呼ばれ、RowStateUnchanged に戻る。
Entity Frameworkの Entity States(Added / Modified /
Deleted / Unchanged / Detached)と発想が同じで、
EF はこの仕組みをオブジェクト単位に発展させたものと理解すると分かりやすい。

補足(CommandBuilder の制約): SqlCommandBuilder による
更新系コマンドの自動生成は手軽だが、以下の制約がある。

  • 対象は単一テーブルの単純な SELECT に限られる
    (JOIN や集計を含むと生成できない)
  • 主キーまたは一意制約が必要
  • 実行時にスキーマを取得するため、往復が 1 回増える
  • 生成される WHERE 句は全列比較(楽観同時実行制御)になり、
    列数が多いと重い

実務では、性能とコントロールのために
InsertCommand / UpdateCommand / DeleteCommand
手で書くほうが確実である。

補足(最新化): 本ページが前提としている
データ・アダプタ構成ウィザードDataGrid への D&D は、
Visual Studio 2003 世代の Windows フォーム開発のスタイルである。
現在は、

  • DataSet / DataTable ではなく POCO クラスにマッピングする
  • マッピングは ORM(Entity Framework /
    Dapper)か DbDataReader から手で詰める
  • I/O は非同期 APIFillAsync は無いため、
    DbDataReader 側の ReadAsync を使う)

が標準。DataAdapter 自体は .NET でも利用可能だが、
既存資産の保守用と考えるのが妥当である。
選定の考え方は
ADO.NET vs ORM (Entity Framework, Dapper)を参照。

参考

関連


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

NetDevInfraWiki

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

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally