Android 7.0设备Xamarin SQLite查询返回集合而非字符串值求助
解决Xamarin SQLite查询返回List而非目标数值的问题
我来帮你分析下问题所在,然后给出具体的解决办法:
核心问题:用错了查询方法
你当前使用的db.Query<Prijem>()方法,设计目的是返回匹配查询条件的Prijem对象列表——哪怕你只查了Count字段,它依然会创建Prijem实例,只填充Count属性,其他属性为null。当你直接打印这个列表时,输出的就是它的类型名System.Collections.Generic.List1[Projectname.Database],而不是你要的Count`值。
正确的解决方式:用ExecuteScalar获取单个值
因为你只需要查询单个字段的结果,用ExecuteScalar更合适,它专门用于执行返回单个值的SQL语句。修改你的查询代码如下:
try { // 用ExecuteScalar直接获取Count字段的字符串值,处理无匹配结果的情况 string countValue = db.ExecuteScalar<string>("SELECT Count FROM Prijem WHERE BCode = ?", kod); Console.WriteLine("**COUNT = " + (countValue ?? "0")); } catch (Exception e) { Console.WriteLine(e); }
这里指定泛型为string,因为你的Count字段定义的是字符串类型,这样就能直接拿到你需要的数值字符串了。如果没有匹配的记录,countValue会是null,所以我加了?? "0"来处理这种情况,避免空引用异常。
顺便帮你修复两个潜在问题
- 插入语句的SQL注入风险
你当前的插入语句是直接拼接字符串,这不仅容易因为特殊字符导致语法错误,还存在SQL注入风险。改成参数化查询更安全:
db.Execute("INSERT INTO Prijem(BCode,Name,FirmName,ItemCode,Count) values(?, ?, ?, ?, ?)", kod, "Test11", "FirmText", "XDD286", "2");
- 主键标注错误
你的Prijem类里,BCode是字符串类型,但你加了[AutoIncrement]标签——这个标签只适用于整数类型的主键,会导致主键生成异常。如果BCode是你自己传入的唯一标识,应该去掉AutoIncrement:
public class Prijem { [PrimaryKey] // 仅保留PrimaryKey,去掉AutoIncrement public string BCode { get; set; } public string Name { get; set; } public string FirmName { get; set; } public string ItemCode { get; set; } public string Count { get; set; } }
内容的提问来源于stack exchange,提问作者lukeey
相关产品推荐
相关产品推荐

