2016-02-27 58 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) 
} 
相关问题