我有一个小问题,我正在努力解决。我正在使用SQLite数据库,并且我第一次启动应用程序时自动创建了我的数据库 Schedule.db (如果.db尚不存在)。
在button_click上我想删除它,以便在我再次启动应用程序时创建新的。
问题是,每次我尝试删除它时都会收到错误:
“附加信息:进程无法访问文件'/filePath.../Scheduler.db',因为它正由另一个进程使用。”
我明白我无法删除它,因为我的应用程序已经在使用它但是我的当前问题是否有任何解决方案?
print()
答案 0 :(得分:0)
我在这里有点失明,没有你的确切代码,但这值得尝试:
...
connectionSqLite.Close();
connectionSqLite.Dispose();
connectionSqLite = null; // Bad coding, see if you can delete this line
...
现在可以自由删除(并重新创建)数据库
你应该不必须设置connectionSqLite = null
,这是过度的,通常是不必要的,也有点不正确,但无论如何都要尝试。见here
(但是 - 请记住,在Dispose
对象上调用connectionSqLite
后,它基本上是空的(null
)。所以你必须将它设置为对象的新实例在你再次使用它之前)
答案 1 :(得分:0)
像这样关闭连接后,强制执行垃圾收集:-
string databasePath = AppDomain.CurrentDomain.BaseDirectory + "Scheduler.db";
if (MessageBox.Show("Do you want to delete database: [Scheduler.db]?", "Question", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.Yes) == MessageBoxResult.Yes)
{
if (File.Exists(databasePath))
{
SQLiteConnection connectionSqlLIte = new SQLiteConnection(@"Data Source=Scheduler.db;Version=3;");
connectionSqlLIte. Close();
//Force a garbage collection here
GC.Collect();
GC.WaitForPendingFinalizers();
//Now you should be able to delete the file now
File.Delete(databasePath);
MessageBox.Show("Database deleted: [Scheduler] ");
Application.Current.Shutdown();
}
else
{
MessageBox.Show("There is no database: [Scheduler]!");
}
}