我们需要使用SqlCommand还是仅仅适用于SqlConnection和SqlDataReader

时间:2010-02-12 13:30:30

标签: c# ado.net

我从msdn

获取此代码
string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";

    using (SqlConnection conn = new SqlConnection(connString))
    {
      SqlCommand cmd = conn.CreateCommand();
      cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";

      conn.Open();

      using (SqlDataReader dr = cmd.ExecuteReader())
      {
        while (dr.Read())
          Console.WriteLine("{0}\t{1}", dr.GetString(0), dr.GetString(1));
      }
    }

你可以看到这里没有使用SqlCommand,所以,它需要吗?

2 个答案:

答案 0 :(得分:10)

您创建的每个实现using的对象都需要IDisposable。其中包括SqlCommandSqlConnection


此规则的例外情况非常少。主要的例外是WCF客户端代理。由于设计缺陷,他们的Dispose方法有时会抛出异常。如果您在using语句中使用了代理,则第二个异常将导致您丢失原始异常。

答案 1 :(得分:4)

您没有需要来使用using语句,但这是一种很好的做法,您应该使用它。它允许使用IDisposable的对象自动处理。

http://msdn.microsoft.com/en-us/library/yh598w02(VS.80).aspx

编辑添加链接并删除不准确的声明,因为@John Saunders是对的。