.NET MAUI中SQLite数据库显示0表但DB Browser可见表的问题求助
解决.NET MAUI中SQLite嵌入式数据库表不显示的问题
核心问题分析
你遇到的现象(连接成功但无表、资源路径错误仍提示成功),本质是SQLite的Create标记会自动创建空数据库,导致即使嵌入式资源复制失败,程序依然能连接到一个空库,而非你预期的预填充数据库。同时当前代码存在资源读取验证缺失、初始化顺序错误的问题。
分步修复方案
1. 确认嵌入式资源的正确名称
嵌入式资源的完整名称格式为[项目命名空间].[文件路径(含文件夹)].[文件名],比如文件在项目根目录、命名空间为SlagalicaDS时,资源名是SlagalicaDS.slagalicaLite.sqlite;如果文件在Resources文件夹下,名称是SlagalicaDS.Resources.slagalicaLite.sqlite。
可以通过以下代码列出所有嵌入式资源,找到正确的名称:
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(App)).Assembly; foreach (var resName in assembly.GetManifestResourceNames()) { Console.WriteLine($"可用资源:{resName}"); }
2. 修复数据库复制方法(添加异常处理与资源校验)
原方法未校验资源流是否为空,也没有异常捕获,导致资源读取失败时静默出错。修改后的方法:
public void CheckAndCopyDatabase() { var dbPath = Constants.DatabasePath; // 数据库已存在则直接返回 if (File.Exists(dbPath)) { labelTime.Text = "数据库已存在"; return; } try { var assembly = IntrospectionExtensions.GetTypeInfo(typeof(App)).Assembly; // 替换为上面查到的正确资源名称 using Stream resourceStream = assembly.GetManifestResourceStream("SlagalicaDS.slagalicaLite.sqlite"); if (resourceStream == null) { labelTime.Text = "未找到嵌入式数据库资源"; return; } // 使用using自动释放流资源 using FileStream fileStream = File.Create(dbPath); resourceStream.CopyTo(fileStream); labelTime.Text = "数据库复制成功"; } catch (Exception ex) { labelTime.Text = $"复制失败:{ex.Message}"; } }
3. 调整数据库初始化顺序
必须先执行数据库复制,再创建SQLite连接,否则会先创建空数据库,导致后续复制步骤跳过:
public HomePage() { InitializeComponent(); // 第一步:复制嵌入式数据库 CheckAndCopyDatabase(); // 第二步:初始化数据库连接 try { App.Database = new SQLiteConnection(Constants.DatabasePath, Constants.Flags); // 验证表数量,直接显示结果 var tableCount = App.Database.ExecuteScalar<int>("SELECT count(*) FROM sqlite_master WHERE type='table';"); labelTitle.Text = $"连接成功,检测到表数量:{tableCount}"; } catch (Exception ex) { labelTitle.Text = $"连接失败:{ex.Message}"; } }
4. 优化SQLiteOpenFlags(可选)
如果不希望在复制失败时自动创建空数据库,可以临时移除Create标记,仅在确认数据库存在后再添加:
// 复制完成后再使用包含Create的标记,或者仅用ReadWrite+SharedCache public const SQLiteOpenFlags Flags = SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.SharedCache;
内容的提问来源于stack exchange,提问作者Dimitrije Stevanovic
相关产品推荐
相关产品推荐

