Viv*_*vit 6 .net c# sql-server locking transactions
我有一个C#应用程序,它使用事务处理SQL Server数据库中的表中的数据.代码非常简单,基本上是这样的:
public string ConnectionString;
public OleDbConnection DbConnection;
public OleDbTransaction DbTransaction;
// ... some initialization stuff ...
DbTransaction = DbConnection.BeginTransaction();
try
{
// ... some insert/update/delete here ...
DbTransaction.Commit();
}
catch (Exception e)
{
// ...
DbTransaction.Rollback();
}
Run Code Online (Sandbox Code Playgroud)
现在,客户报告了一种情况,即表/行集保持锁定状态,而没有活动的应用程序实例正在运行.他的第一个猜测是,在事务期间发生了错误,并且没有带回滚的try-catch-block(但绝对不是这种情况,因为存在正确的错误处理).我可以重现这种情况,如果我之前在调试器中设置了一个断点DbTransaction.Commit();,然后从Windows任务管理器中终止该进程.然后事务保持打开(我可以看到它正在运行DBCC OPENTRAN)并且仍然存在锁,这会阻止进一步使用应用程序的新实例.
我的问题:我怎样才能安全地处理这样的情况 - 进程在事务启动后被终止并且没有机会提交/回滚事务?据我所知,如果应用程序被任务管理器("进程"选项卡)杀死,我无法识别.那么我可以以某种方式自动中止事务(例如在一些超时后)或我还能做什么?请帮忙.
小智 1
也许你应该
SET XACT_ABORT ON
Run Code Online (Sandbox Code Playgroud)
因此,如果发生错误,sql server 会自动回滚当前事务。
http://technet.microsoft.com/de-de/library/ms188792.aspx
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |