我有一个任务(我是学生)。我需要调用 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 回答