Transaction And Lock--事务中使用return会回滚事务吗?
事务中使用return会回滚事务吗?
答案:不会,如果在事务中没有显示提交或回滚事务边return,事务不会被提交或回滚,在C#中,如果没有使用连接池,则事务在连接断开和销毁时被强制回滚,如果使用连接池,则事务在连接被再次使用时调用的exec sp_reset_connection存储过程清理掉。如果该连接没有被再次使用或删除,则事务一直存在,便会一直锁住相关资源不释放,照常日志变大,镜像和复制异常等情况。
测试code:
--创建测试表
CREATE TABLE TB5
(
ID INT
)
测试C# CODE
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(); sb.DataSource = "192.168.1.101"; sb.InitialCatalog = "db1"; sb.Password = "Auto@sql"; sb.UserID = "sa"; sb.IntegratedSecurity = false; sb.ConnectTimeout = 60; sb.Pooling = true; int i = 1000; while (i > 0) { using (SqlConnection conn = new SqlConnection(sb.ConnectionString)) { conn.Open(); SqlCommand comm = conn.CreateCommand(); comm.CommandText = @" BEGIN TRAN TR1 INSERT INTO TB5(ID) SELECT 1 RETURN "; comm.CommandType = System.Data.CommandType.Text; comm.ExecuteNonQuery(); conn.Close(); } i--; Console.WriteLine(i); } System.Threading.Thread.Sleep(60 * 1000);