winform程序中解除占用的方法求助。详见代码表述,并求助?-灵析社区

Midclimateeee

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"); 出现如下图示: ![错误信息](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241004/e4540bfc434e3a97e57534f7c8e1b29b.png) ![错误信息1](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241004/97e5860661822f6d4706980cb4adfdce.png) 应该还是这个窗体进程在占用着这个test.db文件 但我不知道还有什么方法是可以释放的,包括把sc = null;这种设置也是不行的。 求助SF大佬,给予指导

阅读量:120

点赞量:0

问AI
自己更新,以便记录 终于找到答案了。注意使用的是Microsoft.data.sqlite库的情况下。 在连接时,加入“Pooling=false;”可以解决连接池对数据库文件的占用。 形如: string source = "Data Source= " + "E:\\test.db" +“;Pooling=false;” 另一个方法则是在使用连接池的情况下,需要.ClearPool方法。 即使用 SqliteConnection.ClearPool(sc); 其中sc是指的connect实体。