2012-10-05 31 views
0

可能重複:
in a 「using」 block is a SqlConnection closed on return or exception?使用關閉SQL連接的功能帶來了

會這樣using關閉此_connection

using(SqlConnection _connection = Class1.GetSqlConnection()) 
{ //code inside the connection 
} 

//connection should be closed/ended? 

我只是想知道,因爲GetSqlConnection()Class1一個靜態函數和整個連接可能不被關閉,因爲它是主叫外線類的靜態函數,而不是直的?

using(SqlConnection _connection = new SqlConnection(_connectionString) 
{ //code inside the connection 
} 
+0

是的,它會關閉連接。 – Enigmativity

回答

0

是的。

這裏是實現GetSqlFunction方法的另一種方式,讓你有一個更明確的行爲:

public class Class1 
{ 
    private static SqlConnection GetSqlConnection() { /* unchanged */ } 

    public static void UseSqlConnection(Action<SqlConnection> action) 
    { 
     using (var connection = Class1.GetSqlConnection()) 
     { 
      action(connection); 
     } 
    } 
} 

然後調用它像這樣:

Class1.UseSqlConnection(c => 
{ 
    /* use connection here */ 
}); 

然後,您可以擴展這個方法根據您喜歡的語義使用現有連接或創建一個新連接。

1

using聲明並不關心變量如何得到它的值, - 從靜態函數,成員函數,一個new運營商,或其他任何方式吧。一旦達到了using的大括號,就會調用該變量的Dispose()方法,如果它是IDbConnection實例,則關閉連接,或者執行IDisposable在處理時執行的任何操作。

0

是的,設計。

A using塊用於在塊結束時處理一次性物體的處理。到Dispose()對象意味着釋放該對象的所有資源。對於諸如SqlConnection的對象,這將關閉它們的連接。