C# 捕获异常后关闭SQL连接是一种好做法吗?

C# 捕获异常后关闭SQL连接是一种好做法吗?,c#,exception,resources,sqlconnection,C#,Exception,Resources,Sqlconnection,想知道是否应该在发生错误后显式关闭SQL连接,或者这是自动完成的 假设我有一些点击事件 string conString = "something"; string query = "someQuery"; SqlConnection con = new SqlConnection(conString); SqlCommand = new SqlCommand(query, con); try { con.Open() //Something

想知道是否应该在发生错误后显式关闭SQL连接,或者这是自动完成的

假设我有一些点击事件

string conString = "something";
string query = "someQuery";
SqlConnection con = new SqlConnection(conString);
SqlCommand = new SqlCommand(query, con);
try {
   con.Open()
   //Something that will cause an error
} catch (Exception ex) 
{ 
   MessageBox.Show("Error Occurred")
   con.Close()
}

这是一种最佳做法还是毫无意义?我们的想法是在关闭消息框后重试该操作。

无论异常或成功,您都应该在完成后清理连接,但这并不一定意味着调用
Close
。更常见的是,您只需使用
using
语句,它在离开作用域时调用清理API(
Dispose()
)。这很简单:

使用(SqlConnection con=newsqlconnection(consting))
使用(SqlCommand cmd=newsqlcommand(query,con))
{
con.Open();
//某物
}
或者在C#的较新版本中,如果使用的
将在父作用域的末尾结束:

使用var con=newsqlconnection(consting);
使用var cmd=new SqlCommand(query,con);
con.Open();
//某物
您最终可以使用


检查文档。您需要包含一个
using
语句来正确处理连接。如果
使用System.Data.SqlClient,是否有必要这样做一开始就已经包含在代码中了?这不是我所指的。请再次阅读文档。
使用System.Data.SqlClient
是一个使用指令;using语句是完全不同的,应该是
using(SqlConnection con=newsqlconnection(consting)){…}
我认为在这里注意OP示例的不同是很重要的。使用Using语句,连接一旦超出Using语句,就会自动“关闭”或“处置”,如MACS示例中所示。即例外情况。。Using语句与Using指令不同!
  try
    {
        //exec
    }
    catch (Exception err)
    {
       // call error ;
    }
    finally
    {
        // close conn            
    }