C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 21 を表示中)
■9038 / )  Re[3]: リストボックスの全アイテムをテーブルと差分を取り更新
□投稿者/ 魔界の仮面弁士 (474回)-(2007/10/17(Wed) 09:23:42)
No9034 (みこ さん) に返信
> ですので1件ごとに処理をしなければならないのでは?と思ったのですが、そうではないのでしょうか?

いえ。それらの処理は、Adapter 側で自動的に処理させることができます。


DataSet(というよりも、その中のDataTable)に登録された行(DataRow)は、
それぞれ、RowState という「状態」を持っています。

その状態が Unchanged なら「変更なし」、Modified で「修正あり」、Added は「追加」、Deleted が「削除」です。
それぞれについて、編集前の値を得る事も、編集後の値を得ることもできます。(DataRowVersion)


そして DataAdapter/TableAdapter の Update では、各行の RowState を基に、自動的に
INSERT / UPDATE / DELETE の SQL コマンドを発行してくれます。

この SQL とは、Adapter 側の InsertCommand / UpdateCommand / DeleteCommand プロパティです。
これらのコマンド設定次第で、悲観的更新も楽観的更新も可能となっています。
# 悲観的…編集対象の行が、既に他のユーザによって編集済みの場合、更新失敗として扱う。
# 楽観的…他のユーザによる編集結果を無視して、後書き優先として扱う。

[行の状態とバージョン]
http://msdn2.microsoft.com/ja-jp/library/ww3k31w0%28VS.80%29.aspx

[コマンドの自動生成] - [更新および削除のオプティミスティック同時実行制御]
http://msdn2.microsoft.com/ja-jp/library/tf579hcz%28VS.80%29.aspx
返信 編集キー/


管理者用

- Child Tree -