You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"来处理这种情况,避免空引用异常。

顺便帮你修复两个潜在问题

  1. 插入语句的SQL注入风险
    你当前的插入语句是直接拼接字符串,这不仅容易因为特殊字符导致语法错误,还存在SQL注入风险。改成参数化查询更安全:
db.Execute("INSERT INTO Prijem(BCode,Name,FirmName,ItemCode,Count) values(?, ?, ?, ?, ?)", 
           kod, "Test11", "FirmText", "XDD286", "2");
  1. 主键标注错误
    你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:25:26