tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: DataGridView上からデータベースを変更する方法
投稿日: 2009/12/15(Tue) 15:32
投稿者魔界の仮面弁士
> dRow.AcceptChanges()
> adapter.Update(dataset.Tables("SOURCE"))
AcceptChanges すると、その行のステータスは無変更(Unchaged)になります。
(削除行の場合には行リストから除外され、Deleted から Detached になります)

一方、OleDbDataAdapter.Update(DataTable) メソッドは、変更のあった行を
 DataRowState.Added   (追加) → InsertCommand
 DataRowState.Deleted (削除) → DeleteCommand
 DataRowState.Modified(変更) → UpdateCommand
に割り当てられた SQL で更新する処理です。
(adapter.UpdateCommand.CommandText など)

DataRowState.Unchanged なデータは更新対象にならない事に注意してください。


> For Each dRow In dTbl.Rows
DataAdapter.Update を、行単位で呼び出す必要はありません。
 adapter.Update(dataset.Tables("SOURCE"))
の時点で、複数行の未更新データが一括処理されます。

なお、AcceptChanges を呼び出すとすれば、この更新処理の後です。

AcceptChanges を行うかどうかは任意ですが、追加済みのデータを再度追加してしまうと
キー重複エラーになってしまうでしょうから、更新成功後には
 (案1) dataset.Tables("SOURCE").AcceptChanges() を呼び出すなどして、
   DataTable の各行を Unchaged な状態に戻しておく。
 (案2) サーバーから最新のデータを取得し直す。
 (案3) 更新完了後にデータを再更新できないよう、画面側で制限する。
   (画面を閉じる、DataTableを0件にクリアする、更新ボタンをEnabled=Falseにするなど)
などを行っておく事が多いですね。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。