- - PR -
Adapter.Updateで更新に失敗したDataRowを取得したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-20 12:55
VS2005
DataTableのデータをAdapter.UpdateにてDBに更新しようとしています。 DataTableのRowState=Modifiedのデータを更新する際に、 そのデータが他ユーザに削除されていた場合、 Adapter.Update後、更新に失敗したデータを取得したいのですが DataTable.GetErrorsは0件になり RowStateはUnChangedになって取得できません。 どうすれば更新に失敗したデータを取得できますか? | ||||
|
投稿日時: 2007-12-26 11:07
どのDataAdapter(というかDBは何?)を使用しているか分からないですが、
使用しているDataAdapterがDbDataAdapterクラスの派生クラスの場合、 int Update(DataRow[] rows) なるメソッドがあります。 詳細はMSDN(msdn2.microsoft.com)読んでね。 RowState=Modifiedの行だけ抜き出し、ループを回して一行ずつ更新を試み、戻り値で更新したかどうかを判断してみてはいかがでしょう?
C#スマソ | ||||
|
投稿日時: 2007-12-26 13:07
更新対象レコードが存在していなくても、
update 文はデータベースエラーを発生させません。 そのため、アダプターも「エラーあり」とは判断しません。 アダプターに RowUpdated というイベントがあります。 これは各行に対してSQL文が実行されるたびに発生するイベントで、 RecordsAffected プロパティで実際に更新されたレコード数が取得できます。 1 レコードずつ更新していく処理であれば、 このプロパティの値が 1 になっているはずです。 削除されていたりなどの理由で更新対象がなかった場合にはゼロになります。 この方法でどのレコードが更新されなかったかを調べることはできますが、 後でまとめて何かを行いたいなら一度コレクションなどに格納する必要がありますね。 [ メッセージ編集済み 編集者: masa 編集日時 2007-12-26 13:08 ] |
1