这是一个不幸的例子。也许他们想说明在回滚之前如何用try/catch处理错误? 使用事务的安全方法是使用using块。你真的,真的不希望一个事务保持活动的时间超过必要的时间,因为它积累的锁最终会阻塞其他连接,甚至会导致死锁。 事实上,演示死锁的简单方法是使用事务以不同的顺序读取/修改相同的数据。 如果出现错误,以下截取将立即回滚事务: using (SqlConnection connection = new SqlConnection(connectionString)){ connection.Open(); //Do stuff that doesn't need a transaction, //eg read some data using(var sqlTran = connection.BeginTransaction()) { //Do stuff that does need a transaction //Eg multiple UPDATEs or INSERTs sqlTran.Commit(); }} 知道您正在尝试使用数据库中的显式应用程序锁,您应该对任何可能影响或延迟事务生命周期的东西过敏。与常规的行锁不同,应用程序锁很少,碰撞的几率非常高。