C# 关闭数据库连接

标签 c# .net visual-studio

我需要对此有一点了解,当你打开一个到数据库的连接时,你能保持它打开吗?

这个连接是如何关闭的?

这是好的做法还是坏的做法?

目前我有一个对数据库的请求没有问题

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/

相关文章:

javascript - 选择所有分页并显示每页结果,同时使用 JQuery 禁用和启用按钮

c# - 如何从 xmlReader 的当前节点创建 xmlElement?

linux - 使用 vcpkg 安装 ffmpeg

c# - Telerik 免费测试框架与 Selenium

c# - ASP.NET MVC session 为空。未设置 session 变量

.net - 访问 Form 上的成员可能会导致运行时异常,因为它是 marshal-by-reference 类的字段

.net - 使用互锁

c++ - 远程调试C++代码

visual-studio - 如何为 Electron (一个 nodejs 库)配置 Intellisense?

C#,将一个 bool 复制到另一个(通过 ref,而不是 val)