I’m have a web application, that creates an Access database.
When I’m creating this database, I first have to delete the file if it exists and then recreate it.
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();
When I’m recreating this file, I can get an exception.
Exception says: “The file is used in another process.”
Please help me to close this process or to find any way to solve this problem.
Thanks.
The process mantaining the file in use is probably the web application itself. Since closing/opening that mdf file is not directly handled by you, but from the Jet Engine, it is not so easy. I would suggest to PInvoke the system function MoveFileEx specifying:
MOVEFILE_DELAY_UNTIL_REBOOTas dwFlags, meaning the operation would be done at next system restartI know is not the best since server are not so frequently shut down, but is probably the simpler solution to delete a locked file you can’t close elseway.