【发布时间】:2011-11-02 12:10:34
【问题描述】:
我试图从多个数据库表中删除记录。对于错误处理,我正在使用如下所示的 try/catch 块。
try
{
using (SqlCeConnection oConn = new SqlCeConnection(ConnectionString))
{
oConn.Open();
using (SqlCeTransaction transaction = oConn.BeginTransaction())
{
//delete from multiple tables using ADO.NET
transaction.Commit();
}
}
}
catch
{
//error handling
}
问题是当引发异常时,事务不会回滚。在阅读多个论坛时,我的结论是“使用”语句应该处理事务和连接。处置后,应回滚未提交的事务。
谁能告诉我我做错了什么。
【问题讨论】:
-
将
try-catch块移动到using内 -
@L.B 只要异常发生在提交行之前,那应该没有什么不同。表面上代码看起来不错,但它的作用取决于处理代码在 SqlCe DLL 中是如何实现的,我只能假设它做了常识性的事情并回滚事务。
-
我讨厌听起来很愚蠢,但是......你怎么知道你的交易正在被提交,尽管从未点击过 transaction.Commit?
-
您不能使用
oConn在using之外进行回滚 -
SqlTransaction 的处置按您的想法工作(使用回滚),并且在包装在 using 中时将始终被调用。除非在提交后发生异常,否则您所描述的不应发生。你确定不是这样吗?
标签: c# ado.net transactions error-handling using-statement