如何使用ADOX目录类实现IDispoable

时间:2012-07-21 06:17:15

标签: c# adox

我正在尝试通过实现IDisposable接口创建一次性ADOX Catalog实例,但我得到的错误是:  ADOX.Catalog'不包含'Dispose'的定义,也没有扩展方法'Dispose'接受'ADOX.Catalog'类型的第一个参数(你是否缺少using指令或汇编引用?)

这是我的代码

namespace Disposable
{
class DBGen : IDisposable
{
    Catalog cat; 
    public DBGen()
    {
        cat = new Catalog();
        cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=D:\\AccessDB\\NewMDB.mdb;" +"Jet OLEDB:Engine Type=5");
        Console.WriteLine("Database Created Successfully");
        cat = null;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool b)
    {
        if (b)
        {
            cat.Dispose();
        }
    }
}

}

我在

收到错误
   cat.Dispose();
你可以告诉我为什么会这样吗? Thansk

1 个答案:

答案 0 :(得分:0)

字段cat似乎在构造函数中设置为null,因此它始终为null。 在将其设置为null之前尝试处理'cut'。

如果您打算在班级中的其他地方使用cat,那么您应该从构造函数中删除 cat=null;并重写这样的处理:

public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool b)
    {
        if (b)
        {
            if (cat!=null) {
                var disposableCat = cat as IDisposable;
                if (disposableCat != null) {
                   disposableCat.Dispose();
                   cat=null;
                }
            }
        }
    }