C# 要删除文件时出错

C# 要删除文件时出错,c#,ms-access,process,createfile,C#,Ms Access,Process,Createfile,我有一个web应用程序,可以创建Access数据库。 当我创建这个数据库时,我首先必须删除文件(如果它存在),然后重新创建它 if (File.Exists(DataSourcePath + fileName)) File.Delete(DataSourcePath + fileName); string cnnStr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Sourc

我有一个web应用程序,可以创建Access数据库。 当我创建这个数据库时,我首先必须删除文件(如果它存在),然后重新创建它

            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();
当我重新创建此文件时,可能会出现异常。 异常显示:“该文件用于另一个进程。” 请帮助我关闭此过程或找到解决此问题的方法


谢谢。

保存正在使用的文件的过程可能是web应用程序本身。由于关闭/打开mdf文件不是由您直接处理的,而是由Jet引擎处理的,所以并不容易。我建议PInvoke指定系统功能:

  • null作为第二个参数,表示要删除
  • MOVEFILE\u DELAY\u直到重新启动
    作为dwFlags,这意味着操作将在下次系统重新启动时完成

我知道这不是最好的解决方案,因为服务器不会经常关闭,但可能是删除无法关闭Elsway的锁定文件的更简单解决方案。

显示相关代码。更直截了当地引用错误,没有涉及“开放进程”。您的连接可能是池连接,因此关闭它是不够的。看见