妥善处理变量。使用声明是否足够?

时间:2015-06-01 18:40:02

标签: c# ado.net using idisposable

我有一个包含调用存储过程的方法的类。其中一些存储过程返回其他存储过程没有的数据结构。以下是其中一种方法的示例。

public DataTable GetProductData(int productID)
{
  DataTable dataTable = new DataTable();
  using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter())
  {
    using (SqlConnection sqlConn = new SqlConnection("CONNECTIONSTRING"))
    {
      using (SqlCommand sqlCmd = new SqlCommand("getProductData", sqlConn))
      {
        sqlCmd.CommandType = CommandType.StoredProcedure;
        sqlCmd.Parameters.AddWithValue("@ID", productID);
        sqlConn.Open();
        sqlDataAdapter.Fill(dataTable);
      }
    }
  }
  return dataTable;
}

当需要数据访问时,此方法由另一个程序使用。以下是使用上述方法的方法示例...

public DataTable GetProductInfoFromDatabase(int productID)
{
  DataLibrary dl = new DataLibrary();
  return dl.GetProductData(productID);
}

我想知道的是,一旦检索到数据,我应该如何处理dl变量。垃圾收集是否会处理它,还是应该在定义GetProductData方法的类中实现IDisposable? using语句是否足够?

1 个答案:

答案 0 :(得分:3)

除非您的班级持有非托管资源或其他IDisposable个对象; 没有,您不需要自己实施IDisposable。空Dispose方法会为您购买 nothing

在您提供的代码中,using语句就足够了。在DataLibrary中创建的GetProductInfoFromDatabase对象将由GC按预期收集。