数据表内部使用?

时间:2011-11-29 08:06:14

标签: c# datatable dispose

我已经在使用块中声明了数据表,该块在作用域的末尾调用了Dispose方法。

 using (DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems())
            {
                 ...
            }

但是在反射器中,数据表并不具有Dispose函数

enter image description here

怎么样?

3 个答案:

答案 0 :(得分:3)

System.Data.DataTable扩展System.ComponentModel.MarshalByValueComponent,MarshalByValueComponent实现IDisposable

反射器不会显示基本类型的方法,除非它们在派生类型中被覆盖。

答案 1 :(得分:3)

DataTable继承自实现MarshalByValueComponent接口的IDisposable类(见下文),C#允许为派生类的实例调用基类公共方法。

public class DataTable : MarshalByValueComponent, 
    IListSource, ISupportInitializeNotification, 
    ISupportInitialize, ISerializable, IXmlSerializable

public class MarshalByValueComponent : 
    IComponent, IDisposable, IServiceProvider

您的代码块将在引擎盖下表示,如下所示,因此它保证将调用Dispose()方法:

{
  DataTable dt = Admin_User_Functions.Admin_KitItems_GetItems()

  try
  {
     // .. code inside using statement
  }
  finally
  {
    if (dt != null)
      ((IDisposable)dt).Dispose();
  }
}

有关详细信息,请参阅MSDN:using Statement

答案 2 :(得分:-1)

为什么要尝试处理DataTable?如果你真的想要这样做,你应该从它的DataSet中删除它。