0

ADOX カタログ クラスを使用して、空の Ms Access データベースを作成しようとしています。コードは (私の知る限り) 正常に動作し、データベースを生成しますが、Windows エクスプローラーからデータベースを開こうとすると、「できませんでした」 use name.accdb ; The file already in use " エラー メッセージ。ファイル ディレクトリを確認したところ、データベースを開かずに、ディレクトリに name.idb ファイルも表示されました。C# Windows フォーム アプリケーションを閉じると、name.idb が消え、データベースを開くことができます。これは、ADOX を使用してデータベースを作成するために使用したコードです。

 public void CreateDatabase()
    {
        string databaseName = txtFileName.Text;
        try
        {
            ADOX.Catalog cat = new ADOX.Catalog();

            if (!File.Exists(databaseName + ".accdb"))
            {
                cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data 
                 Source=D:\\" + databaseName + ".accdb" + ";");
                cat = null;
            }
            cat = null;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message, e.Source);
        }
    }

また、 IDispaosable インターフェイスを実装して cat オブジェクトを破棄しようとしましたが、何も変わりませんでした。この問題を修正する方法を教えてください。ユーザーは、アプリケーションによって生成された後、アプリを閉じる (強制終了) せずにデータベースを開くことができますか?

よろしく

4

1 に答える 1

2

おそらく、オブジェクトを解放する必要があります。Create を呼び出した後、次を追加してみてください。

Marshal.FinalReleaseComObject(cat.Tables);
Marshal.FinalReleaseComObject(cat.ActiveConnection);
Marshal.FinalReleaseComObject(cat);
于 2012-12-31T14:11:48.993 に答える