事務中使用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);