簡體   English   中英

多個連接到同一 TransactionScope 中的同一 DB

[英]Multiple connections to the same DB in the same TransactionScope

當我們為 C# 中的每個語句打開關閉連接時,如何在單個事務中處理連接?

該場景使用相同的連接字符串,並且連接打開和關閉多種類型,每個語句一次。

考慮以下示例

void updateSomething() {
    using (SqlConnection connection = new SqlConnection(  
      "Integrated Security=SSPI;Initial Catalog=Northwind"))  
    {  
        connection.Open();        
        // Execute the statements
        connection.Close();  
    }  
 }

當我執行以下代碼時:

void SomeMethod()
{
    using(TransactionScope scope = new TransactionScope())
    {
        for(int i=0; i < 10; i++) 
        {
            this.updateSomething();
        }
        scope.Complete();
    }
}

建議對每個語句使用連接打開/關閉。 那是因為我們實際上並沒有創建連接,我們只是使用池中的一個。

為什么會這樣? 我知道我們保持連接的時間越短越好,但問題是在大多數交易中,我們將在下一個語句的下一刻得到它。

如果存在一些這樣的語句,是否只是為了避免語句之間要求的代碼計算時間(它不應該因為它會將數據庫鎖定在事務 state 中所需的時間更長)。

在事務期間保持一個連接打開是否有意義?

建議對每個語句使用連接打開/關閉。

如果沒有在上下文中看到該評論,我猜這個建議是因為您所說的:創建和銷毀SqlConnection對象並不意味着您正在創建和銷毀網絡連接。

我認為“為每個語句使用一個”背后的動機是不要擔心在創建SqlConnection對象時嘗試提高效率。 不要讓 go 讓一個人活着,並在整個代碼中傳遞它,以為您正在避免斷開網絡連接。 沒有意義。

在您的示例中,它不會真正有所作為。 如果您願意,可以對每個查詢使用相同的SqlConnection object,只要您按順序而不是並行進行。 由於您節省了創建SqlConnection object 的計算時間,因此效率可能會更高一些 但是,節省的時間可能甚至不會被注意到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM