タイトル : 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にするなど) などを行っておく事が多いですね。 |