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

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");
出现如下图示:
错误信息

错误信息1

应该还是这个窗体进程在占用着这个test.db文件
但我不知道还有什么方法是可以释放的,包括把sc = null;这种设置也是不行的。

求助SF大佬,给予指导

阅读 2.2k
2 个回答

自己更新,以便记录
终于找到答案了。注意使用的是Microsoft.data.sqlite库的情况下。
在连接时,加入“Pooling=false;”可以解决连接池对数据库文件的占用。
形如:

string source = "Data Source= " + "E:\\test.db" +“;Pooling=false;”

另一个方法则是在使用连接池的情况下,需要.ClearPool方法。
即使用

SqliteConnection.ClearPool(sc);

其中sc是指的connect实体。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏