課題があります(学生です)。DBCurrencyException を呼び出す必要があります。データベース データを変更するクライアント アプリから SQL ストアド プロシージャを呼び出すときに、DBCurrencyException を発生させることは可能ですか? 出来ますか?
質問する
120 次
1 に答える
0
ADO.Net データセットは、デフォルトでオプティミスティック コンカレンシーを使用します。行がデータベースに存在しなくなったときに行をデータベースに更新しようとすると、次のエラーが発生します。同時実行違反: UpdateCommand は、予想される 1 レコードのうち 0 に影響を与えました。
そのエラーが発生するシナリオを次に示します。
// data row has been added
DataRow dr= null;
dtTab = (DataTable)Session("dtTab");
dr = dtTab.Rows(e.RowIndex);
dr.Delete();
dtTab.AcceptChanges();
// If Acceptchanges() being not called, row status will be
//detached, that will not be updated to database.
//Without updating database Acceptchanges() called.Row status
//changed to deleted. If this update to database,
// it will give concurrency error-
// because row no longer exist in database.
エラーの理由が明らかになりました。テーブルの行のレコードはデータベースに存在しませんでした。ただし、DeleteCommand はそれらをデータベースから削除しようとしていました。また、データ アダプタ クラスがレコードを削除しようとして、行が変更されていないことが確認されると、同時実行違反が発生したと見なされます。
この問題に関する記事(上記のコードのソース) は次のとおりです。この記事では、DBConcurrencyException がいつ発生するか、および問題を解決する方法について説明します。記事を読んでください。
ストア プロシージャで同じことを試してください。これが役立つ場合があります。
于 2013-10-20T03:49:10.343 に答える