Transaction And Lock--事務中使用return會回滾事務嗎?

事務中使用return會回滾事務嗎?sql

答案:不會,若是在事務中沒有顯示提交或回滾事務邊return,事務不會被提交或回滾,在C#中,若是沒有使用鏈接池,則事務在鏈接斷開和銷燬時被強制回滾,若是使用鏈接池,則事務在鏈接被再次使用時調用的exec sp_reset_connection存儲過程清理掉。若是該鏈接沒有被再次使用或刪除,則事務一直存在,便會一直鎖住相關資源不釋放,照常日誌變大,鏡像和複製異常等狀況。測試

測試code:
--建立測試表
CREATE TABLE TB5
(
ID INT
)ui

測試C# CODEspa

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);
相關文章
相關標籤/搜索