0

IDisposable インターフェイスを実装して使い捨ての ADOX カタログ インスタンスを作成しようとしていますが、次のようなエラーが発生します。 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();

なぜこれが起こっているのか教えてください。ありがとう

4

1 に答える 1

0

フィールドcatはコンストラクターで null に設定されているように見えるため、常に null です。null に設定する前に、'cut' を破棄してみてください。

catクラスの他の場所で使用する場合は、コンストラクターから削除 cat=null;し、次のように dispose を書き換える必要があります。

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;
                }
            }
        }
    }
于 2012-07-21T06:22:55.887 に答える