Sqlite数据库文件无法删除

Sqlite数据库文件无法删除问题描述 VS2010Setup 工程卸载安装程序时 发生本地 sqlite 数据库文件无法删除 该卸载程序在完成卸载前读取了本地数据库的信息 代码大致如下 privateDataT stringdataba stringsql SQLiteConnec newSQLi

问题描述:

VS2010 Setup工程卸载安装程序时,发生本地sqlite数据库文件无法删除。该卸载程序在完成卸载前读取了本地数据库的信息,代码大致如下:

private DataTable GetDataTableBySql(string databaseFilePath,string sql) { SQLiteConnection conn = new SQLiteConnection("Data Source=" + databaseFilePath+ ";Version=3"); DataTable datatable = new DataTable(); try { conn.Open(); SQLiteCommand comm = new SQLiteCommand(sql, conn); SQLiteDataReader reader = comm.ExecuteReader(); DataColumn column = new DataColumn(); for (int i = 0; i < columns.Count(); i++) { if (columns[i].Length > 0) { datatable.Columns.Add(columns[i].ToString()); } } while (reader.Read()) { DataRow dr = datatable.NewRow(); for (int i = 0; i < reader.FieldCount; i++) { dr[i] = reader[i].ToString(); } datatable.Rows.Add(dr); dr = null; } reader.Close(); conn.Close(); } catch (Exception ex) { conn.Close(); return datatable; } return datatable; }

数据库信息读取完毕后,也调用close()方法关闭了连接,但是无法完成程序的卸载过程,报“另一个应用程序已经以独占模式访问文件...”。

问题解决:

上述代码中,虽然已经调用close()方法,但是C#的垃圾回收机制并没有马上回收数据库连接对象。有两种办法可以解决上述问题。

其一,调用Dispose方法,让垃圾回收机制立即回收数据库连接对象。

private DataTable GetDataTableBySql(string databaseFilePath,string sql) { SQLiteConnection conn = new SQLiteConnection("Data Source=" + databaseFilePath+ ";Version=3"); DataTable datatable = new DataTable(); try { conn.Open(); SQLiteCommand comm = new SQLiteCommand(sql, conn); SQLiteDataReader reader = comm.ExecuteReader(); DataColumn column = new DataColumn(); for (int i = 0; i < columns.Count(); i++) { if (columns[i].Length > 0) { datatable.Columns.Add(columns[i].ToString()); } } while (reader.Read()) { DataRow dr = datatable.NewRow(); for (int i = 0; i < reader.FieldCount; i++) { dr[i] = reader[i].ToString(); } datatable.Rows.Add(dr); dr = null; } reader.Close(); //立即释放comm comm.Dispose(); conn.Close(); //立即释放conn conn.Dispose(); } catch (Exception ex) { conn.Close(); return datatable; } return datatable; }

其二,使用using(){},using语句块中的对象,在语句块结束后会由马上被回收。

private DataTable GetDataTableBySql1(string databaseFilePath,string sql) { DataTable datatable = new DataTable(); try { using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + databaseFilePath+ ";Version=3")) { conn.Open(); using (SQLiteCommand comm = new SQLiteCommand(sql, conn)) { using (SQLiteDataReader reader = comm.ExecuteReader()) { DataColumn column = new DataColumn(); for (int i = 0; i < columns.Count(); i++) { if (columns[i].Length > 0) { datatable.Columns.Add(columns[i].ToString()); } } while (reader.Read()) { DataRow dr = datatable.NewRow(); for (int i = 0; i < reader.FieldCount; i++) { dr[i] = reader[i].ToString(); } datatable.Rows.Add(dr); dr = null; } } } conn.Close(); } } catch (Exception ex) { return datatable; } return datatable; }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205946.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:49
下一篇 2026年3月19日 下午4:50


相关推荐

  • 2021.7idea激活码_在线激活

    (2021.7idea激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    73
  • JavaScript判断变量是否为undefined两种方式差异[通俗易懂]

    JavaScript判断变量是否为undefined两种方式差异

    2022年2月11日
    60
  • 手机号正则表达式精简

    手机号正则表达式精简

    2021年9月25日
    71
  • IDEA2021.1 安装教程

    IDEA2021.1 安装教程工欲善其事必先利其器。一、下载IDEA官方下载地址:https://www.jetbrains.com/zh-cn/idea/download/二、安装IDEA注:安装IDEA之前需要我们机器上有JDK环境!!!双击打开安装即可:三、IDEA快速入门双击打开IntelliJIDEA2021.1.1×64:1、使用IDEA创建一个普通javase项目。2、使用IDEA创建一个maven项目。.

    2022年6月15日
    171
  • 用Xshell连接虚拟机Linux「建议收藏」

    用Xshell连接虚拟机Linux「建议收藏」首先,要将虚拟机中的Linux系统设置为桥接模式。然后进一步确认虚拟机的ip地址跟本机地址在同一个网段(要ping的通)。具体操作如下:1、查看我本机的IP地址是:10.253.0.512、继续查看虚拟机中linux系统的IP地址是:10.253.0.91然后在windows上ping一下:可见完全是ping的通的。3、接下来配置Linux的

    2026年2月17日
    3
  • pycharm输入了激活码提升key is invaild_在线激活

    (pycharm输入了激活码提升key is invaild)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlEC87GSLRKZ-eyJsaWNlbnNlSWQi…

    2022年3月28日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号