考虑以下代码,如果发现异常,则不会回滚事务。
transaction = connection.BeginTransaction();
command.Transaction = transaction;
try {
// interact with database here
catch {}
finally {
connection.Close();
}
这有什么后果,是否有必要回滚交易?
答案 0 :(得分:14)
最好是在像这样的使用块中生成你的事务:
using( /*code to create the transaction you want )
{
//perform your transaction here
transaction.Commit();
}
如果您在调用commit之前编码失败,则会在退出using块时自动回滚。
答案 1 :(得分:2)
它将在数据库上留下一个打开的事务,这可能会阻止其他查询。
取自here:
考虑以下一般情况 使用交易时的准则 这样你就可以避免造成 死锁:
始终以相同的顺序访问表 跨越您的交易 应用。一个人的可能性 访问时死锁会增加 每次都以不同的顺序排列表 你访问它们。
将交易保持为 尽可能短。不要做 来自的阻止或长时间呼叫 交易。保持持续时间 交易简短。一种方法是 运行接近数据的事务 资源。例如,运行一个事务 从存储过程而不是 从a运行事务 不同的电脑。
选择一个等级 隔离,平衡并发 和数据完整性。最高的 隔离级别,可序列化,减少 并发性和提供最高 数据完整性水平。最低的 隔离级别,读取未提交, 结果相反。