2016-02-27 44 views
2

我一直在使用「connection.Close()」是關閉SQL連接的最好還是最安全的方法?

connection.Close(); 

但是,這是我在.NET中的第一個項目,我不知道如果我正確地關閉它。

我不希望我的網站在真正託管之後立即死亡。

通常我做這種方式:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()); 

    SqlCommand cmd = new SqlCommand(); 

    cmd.Connection = conn; 

    // <some code> 

    conn.Open(); 
    /<some code> 
    conn.Close(); 
+0

這是確定你的代碼,但使用更明確 –

回答

6

你應該放在using語句的連接;

using(var connection = new SqlConnection) 
{ 
    connection.Open(); 
    ...other code using it here. 
} 

using語句確保在您完成SqlConnection時處理它。在您的場景中(取決於您放置close方法的位置),如果異常關閉,它將永遠不會到達Close()方法,並且連接將保持打開狀態。

更好的是,因爲你正在建立一個網站。 Request對象(應該可用)應該有一個名爲RegisterForDispose的方法。這會在請求結束時自動處理連接(將其關閉)。您可以使用它像這樣:

var connection = new SqlConnection(); 
Request.RegisterForDispose(connection); 

兩個完成同樣的事情到了最後,但第二個允許更多的靈活性。

+0

編輯我的貼。這是你的意思嗎? – Harugawa

+0

是的,所以在你的代碼中,如果某處發生異常,連接將不會關閉。它最終會像垃圾收集器一樣在某個時間完成它,但最好確保你要麼嘗試/最終要麼使用聲明。 – kemiller2002

+0

+1使用塊可確保連接及其基礎流和事件循環的生命週期和適當處置。 ,只要您通過Try-Finally塊管理它,Close()就可以了。無論如何,在程序層面,連接變量將在返回後超出範圍。 –

2

做什麼凱文說,把你的。開()調用的使用塊內:

using(var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString())) 
{ 
    var cmd = new SqlCommand("my sql command here", conn); 

    conn.Open(); 

    cmd.(whatever method you are using) 
} 
相關問題