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 回答