C# 捕获异常后关闭SQL连接是一种好做法吗?
想知道是否应该在发生错误后显式关闭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
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
}