VB.NET使用SQLite时移动数据库文件到其他文件夹后无表显示如何解决
问题原因
你遇到的是SQLite默认自动创建库机制导致的问题:当代码中指定的数据库路径不存在时,SQLite不会抛出报错,而是会自动在对应路径生成一个空白的同名数据库文件,你打开看到的就是这个新生成的空白库,不是你移动过去的、有23张表的原库。
排查及解决步骤
- 第一步:先确认数据库连接字符串路径是否正确
移动数据库后必须更新连接字符串里的Data Source参数值为新的文件绝对路径,不要用相对路径,相对路径会默认指向程序运行的bin/Debug或者bin/Release文件夹,很容易匹配不到你移动后的库位置。如果你的连接字符串是写在App.config配置文件里的,同步修改配置文件中对应节点的路径值即可。
示例正确的连接字符串写法:
如果你一定要用相对路径,建议先打印当前程序的工作目录确认位置:Dim connStr As String = "Data Source=C:\你的新文件夹路径\你的数据库文件名.db;Version=3;"
把移动后的数据库放到这个打印出来的路径下即可。MessageBox.Show(Application.StartupPath) - 第二步:连接前新增文件存在校验,避免自动生成空白库
在创建数据库连接前加一层文件存在判断,避免找不到文件时触发自动建库逻辑:Imports System.IO ' 提前导入命名空间 ' 后续逻辑 Dim dbPath As String = "C:\你的新文件夹路径\你的数据库文件名.db" If Not File.Exists(dbPath) Then MessageBox.Show("数据库文件不存在,请检查路径配置") Return End If Dim conn As New SQLiteConnection($"Data Source={dbPath};Version=3;") - 第三步:确认数据库存储路径的读写权限
如果你把数据库移动到了系统级受保护文件夹(比如C:\Windows、C:\Program Files),程序默认没有读写权限,也会触发自动创建空白库的逻辑,建议把数据库放到普通用户权限可访问的文件夹,比如C:\Users\你的用户名\Documents下的子文件夹。 - 第四步:确认数据库文件后缀名未被篡改
移动文件时如果不小心去掉了.db/.sqlite后缀,或者修改了后缀名,也会导致代码匹配不到正确的文件,可以在文件夹选项里开启「显示已知文件类型的扩展名」,确认文件名和连接字符串里的配置完全一致。
内容的提问来源于stack exchange,提问作者Hamada
相关产品推荐
相关产品推荐

