SQLite查询用户存在问题:为何查询语句返回计数为0?
问题分析与解决
首先,你的核心错误在于第二个查询找错了表!
- 第一个查询
SELECT * FROM sqlite_master ...是完全正确的:sqlite_master是SQLite的系统表,专门存储数据库中表、视图、索引等对象的元数据,所以你能查到UserTable存在,返回计数1是正常的。 - 但第二个查询还在
sqlite_master里找NameOfUser字段就大错特错了!sqlite_master里根本没有这个字段——这个字段是你自己的UserTable中存储用户数据的字段,不属于系统表的结构。所以无论你有没有添加目标用户,这个查询都永远会返回0。
正确的查询方式
要验证目标用户是否存在,你应该直接查询你的业务表UserTable,而不是系统表:
// 正确的查询:直接在UserTable中匹配用户名字段 Int32 userCount = database.Query(map, "SELECT * FROM UserTable WHERE NameOfUser = @userName", ps).Count;
额外的重要提醒:杜绝SQL注入风险
你原来的代码用字符串拼接'" + personsName + "'传递参数的方式非常危险,很容易引发SQL注入攻击,还可能因为名字里包含单引号等特殊字符导致SQL语法错误。你代码里已经有ps参数集合,应该用参数化查询的方式传递personsName,比如:
// 先向参数集合中添加参数(示例,根据你使用的SQLite客户端调整) ps.Add(new SQLiteParameter("@userName", personsName)); // 再执行上面的正确查询语句
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

