我需要对此有一点了解,当你打开一个到数据库的连接时,你能保持它打开吗?
这个连接是如何关闭的?
这是好的做法还是坏的做法?
目前我有一个对数据库的请求没有问题
oCON.Open();
oCMD.ExecuteNonQuery();
oCON.Close();
然而,我看到的一些例子是这样的,没有关闭数据库。
oCON.Open();
oCMD.ExecuteNonQuery();
如何关闭此连接?
这是不好的做法吗?
最佳答案
我正在寻找副本,因为这似乎是一个常见问题。我找到的最佳答案是 this one , 但是,我不喜欢给出的答案。
您应该始终在完成连接后立即关闭它。数据库允许的连接数是有限的,而且它也占用大量资源。
确保关闭发生的“老派”方法是使用 try
/catch
/finally
block :
SqlConnection connection;
SqlCommand command;
try
{
// Properly fill in all constructor variables.
connection = new SqlConnection();
command = new SqlCommand();
connection.Open();
command.ExecuteNonQuery();
// Parse the results
}
catch (Exception ex)
{
// Do whatever you need with exception
}
finally
{
if (connection != null)
{
connection.Dispose();
}
if (command != null)
{
command.Dispose();
}
}
但是,using
语句是首选方式,因为它会自动处理对象。
try
{
using (var connection = new SqlConnection())
using (var command = new SqlCommand())
{
connection.Open();
command.ExecuteNonQuery();
// Do whatever else you need to.
}
}
catch (Exception ex)
{
// Handle any exception.
}
using
语句的特殊之处在于,即使抛出异常,它仍然会处理在代码执行停止之前创建的对象。它使您的代码更加简洁易读。
如 christophano 所述在评论中,当您的代码被编译成 IL 时,它实际上被写成一个 try
/finally
block ,复制上面示例中所做的事情。
关于C# 关闭数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36375727/