0

課題があります(学生です)。DBCurrencyException を呼び出す必要があります。データベース データを変更するクライアント アプリから SQL ストアド プロシージャを呼び出すときに、DBCurrencyException を発生させることは可能ですか? 出来ますか?

4

1 に答える 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 に答える