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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM