0

Access データベースを作成する Web アプリケーションがあります。このデータベースを作成するとき、最初にファイルが存在する場合は削除してから、再作成する必要があります。

            if (File.Exists(DataSourcePath + fileName))
                File.Delete(DataSourcePath + fileName);

            string cnnStr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + DataSourcePath + fileName + "; Jet OLEDB:Engine Type=5";
            var catType = Type.GetTypeFromProgID("ADOX.Catalog");
            object o = Activator.CreateInstance(catType);
            catType.InvokeMember("Create", BindingFlags.InvokeMethod, null, o, new object[] { cnnStr });

            OleDbConnection cnn = new OleDbConnection(cnnStr);
            var cmd = cnn.CreateCommand();

            cnn.Open();
            cmd.CommandText = "CREATE TABLE TblInfoCompany (Name TEXT, Family TEXT)";
            cmd.ExecuteNonQuery();

            cmd.Dispose();
            cnn.Close();
            cnn.Dispose();

このファイルを再作成すると、例外が発生することがあります。例外は、「ファイルは別のプロセスで使用されています」と言います。このプロセスを終了するか、この問題を解決する方法を見つけるのを手伝ってください。

ありがとう。

4

1 に答える 1

1

使用中のファイルを管理するプロセスは、おそらく Web アプリケーション自体です。その mdf ファイルを閉じたり開いたりするのは、ユーザーが直接処理するのではなく、Jet Engine から行うため、それほど簡単ではありません。次のように指定して、システム関数MoveFileExを PInvoke することをお勧めします。

  • 削除することを意味する 2 番目のパラメーターとしての null
  • MOVEFILE_DELAY_UNTIL_REBOOTdwFlags として、次のシステムの再起動時に操作が行われることを意味します

サーバーが頻繁にシャットダウンされるわけではないので、最善ではないことはわかっていますが、他の方法では閉じることができないロックされたファイルを削除するためのより簡単なソリューションです。

于 2012-08-25T10:02:02.537 に答える