-
Notifications
You must be signed in to change notification settings - Fork 0
MS_DataAdapter
- 戻る(ADO.NET)
- DataAdapter
- TableAdapter
-
@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は、DataGridのDataSourceプロパティでバインドできる。 -
DataGrid経由で更新したDataSetは、Updateメソッドから
InsertCommand、UpdateCommand、DeleteCommand経由でデータベースを更新できる。
-
移行メモ(元ページの状態): 元ページは概要のみで、
「参考」節や Tags 行が無い状態だった。
体裁を_Template.mdに合わせ、以下に補記を追加した。
DataAdapter(SqlDataAdapter 等)は、
DataSet とデータ ソースの間を仲介するブリッジである。
| メソッド | 方向 | 内容 |
|---|---|---|
Fill |
DB → DataSet
|
SelectCommand を実行して結果を DataTable に格納 |
Update |
DataSet → DB |
各行の RowState に応じて Insert/Update/Delete の各 Command を実行 |
つまり、ADO.NETの非接続型データアクセスを成立させるための部品である。
補足(
RowStateが更新の駆動源):Updateが何を発行するかは、
DataRow.RowStateで決まる。
RowState 実行される Command AddedInsertCommandModifiedUpdateCommandDeletedDeleteCommandUnchanged何も実行されない
Updateの成功後にAcceptChangesが呼ばれ、RowStateはUnchangedに戻る。
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 は非同期 API(
FillAsyncは無いため、
DbDataReader側のReadAsyncを使う)が標準。
DataAdapter自体は .NET でも利用可能だが、
既存資産の保守用と考えるのが妥当である。
選定の考え方は
ADO.NET vs ORM (Entity Framework, Dapper)を参照。
- DataAdapter と DataReader | Microsoft Learn
https://learn.microsoft.com/ja-jp/dotnet/framework/data/adonet/dataadapters-and-datareaders - DataAdapter を使用したデータ ソースの更新
https://learn.microsoft.com/ja-jp/dotnet/framework/data/adonet/updating-data-sources-with-dataadapters - CommandBuilder でのコマンドの生成
https://learn.microsoft.com/ja-jp/dotnet/framework/data/adonet/generating-commands-with-commandbuilders
Tags: 移行, データアクセス, .NET開発, ADO.NET
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。