UWP SQLite查询返回Null但数据表有数据,该如何排查?
排查SQLite查询返回Null的问题
咱们一步一步揪出问题根源,你的代码里有几个关键细节没处理到位,导致明明数据库有数据却拿不到结果:
1. 数据库连接未打开
你只初始化了SQLiteConnection对象,但完全没调用dbConnection.Open()方法!连接处于关闭状态时,执行查询根本无法读取到数据库里的数据,这是最核心的问题。
2. 连接字符串格式错误
SQLite的连接字符串需要明确指定Data Source参数,直接传文件名是不合法的。正确的格式应该是这样:
"Data Source=RPR_REKENSOFTWARE_DB.db;Version=3;"
如果数据库文件不在程序的默认工作目录下,还需要加上完整的文件路径。
3. 列索引可能有误
SQLiteStatement的索引是从0开始计数的,dbState[1]取的是结果集的第二列。如果你的partNr是parts表的第一列,那你应该用dbState[0],否则就会取到错误的列(甚至空值)。
4. 资源未正确释放
使用SQLite相关对象时,最好用using语句包裹,确保资源能自动释放,避免内存泄漏或连接占用的问题。
修正后的代码示例
public static List<string> GetParts() { var items = new List<string>(); // 用using包裹连接,确保自动释放资源 using (var dbConnection = new SQLiteConnection("Data Source=RPR_REKENSOFTWARE_DB.db;Version=3;")) { try { dbConnection.Open(); // 必须打开连接才能执行查询! string sSQL = @"SELECT partNr FROM parts;"; // 建议明确指定字段,避免*带来的索引混乱 using (var dbState = dbConnection.Prepare(sSQL)) { while (dbState.Step() == SQLiteResult.ROW) { // 这里对应SELECT的字段位置,因为只查了partNr,所以用索引0 string partNr = dbState[0] as string; // 加个判断避免空值混入列表 if (!string.IsNullOrEmpty(partNr)) { items.Add(partNr); } } } } catch (Exception ex) { Debug.WriteLine($"查询出错:{ex.Message}\n{ex.StackTrace}"); throw; // 直接throw保留原始堆栈信息,不要重新throw ex } } return items; }
额外排查建议
- 尽量避免用
SELECT *,明确写出需要的字段名,这样列索引的对应关系更清晰,也能减少不必要的数据读取。 - 在catch块里打印完整的异常信息(包括堆栈),能帮你更快定位到具体的错误点。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

