c# - 是否有必要处置 SqlConnection 以及 SqlCommand?

标签 c# ado.net sqlconnection sqlcommand

是否有必要分别处理 SqlConnection 和 SqlCommand?

我正在对应用程序进行一些维护工作,发现以下代码:

public void CallStoredProc(string storedProcName)
{
    using (SqlCommand command = new SqlCommand(storedProcName, CreateConnection()))
    {
        command.CommandType = CommandType.StoredProcedure;
        command.Connection.Open();

        // Additional code here.

        command.ExecuteNonQuery();
    }
}

这是否会在正常情况下以及出现错误时正确清理 SqlConnection?或者我们是否必须将代码更改为:

public void CallStoredProc(string storedProcName)
{
    using (SqlConnection connection = CreateConnection())
    {
        using (SqlCommand command = new SqlCommand(storedProcName, connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Connection.Open();

            // Additional code here.

            command.ExecuteNonQuery();
        }
    }
}

最佳答案

是的,有必要在您的代码执行后释放 sqlconnection 和 sqlcommand 对象。

现在,您可以通过两种方式实现这一目标:

  1. 在 using 语句中编写代码,它将负责处理对象,因为 sqlconnection 和 sqlcommand 实现了负责处理对象的 IDisposable 接口(interface)。
  2. 通过在 sqlconnection 对象上显式调用 .close() 方法。

关于c# - 是否有必要处置 SqlConnection 以及 SqlCommand?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33116834/

相关文章:

sql-server-2008 - 普适 SQL ADO.NET 数据提供程序

c# - 在 using() 语句中使用之前声明的 SqlConnection() 完成后是否仍会关闭连接? (C#/SQL 服务器)

c# - 从另一个 WCF 服务调用 ASMX 或 WCF 服务

c# - GridView如何将字符串格式应用于项目

c# - T4 模板在某些 PC 上生成额外的新行

php - 无法连接到 mysql 服务器(由 strato 托管)出现错误 10060

c# - windows服务打不开sql连接

c# - 如何在 WPF 的 Web 浏览器控件中显示 unicode 字符

c# - 连接池是否跨应用共享

c# - SqlBulkCopy - 哪个数据库导致异常?