Winform编程中,有一个场景是:
1、窗体启动时创建一个test.db数据库文件;
2、窗体关闭时将这个新建的test.db文件删除。
但是在处理时出现该文件被其他进程占用。
代码很简单,两个事件,使用的是using Microsoft.Data.Sqlite;库
Load事件
private void Form1_Load(object sender, EventArgs e)
{
string source = "Data Source= " + "E:\\test.db";
using(SqliteConnection sc = new(source))
{
sc.Open();
sc.Close();
Trace.WriteLine(sc.State);
}
}
FormClosed事件
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
File.Delete("E:\\test.db");
}
看似将数据库连接关闭了,因为 Trace.WriteLine(sc.State);这句在输出窗口显示 为 Closed.
但在执行File.Delete("E:\test.db");
出现如下图示:
应该还是这个窗体进程在占用着这个test.db文件
但我不知道还有什么方法是可以释放的,包括把sc = null;这种设置也是不行的。
求助SF大佬,给予指导
自己更新,以便记录
终于找到答案了。注意使用的是Microsoft.data.sqlite库的情况下。
在连接时,加入“Pooling=false;”可以解决连接池对数据库文件的占用。
形如:
另一个方法则是在使用连接池的情况下,需要.ClearPool方法。
即使用
其中sc是指的connect实体。