如何解决 SQLite 查询的空绑定?

Posted

技术标签:

【中文标题】如何解决 SQLite 查询的空绑定?【英文标题】:How to resolve null bindings on SQLite query? 【发布时间】:2016-03-09 21:16:43 【问题描述】:

我正在使用 SQLite 库和 SQLite.Net 来查询我的 Windows Phone 8.1 项目中的现有数据库。到目前为止,与数据库的连接执行良好,但返回的记录为空。

我采取了通常的调试步骤 -

1.检查映射到我的数据库架构中名称的绑定类型和名称。

2.验证数据库中存在数据。

3.遍历查询数据库的代码,发现db bindings为null。 (这表明我的 POCO 中的字段映射存在问题)

我没有收到任何编译时错误,但返回的记录为空。

问题: 有谁知道为什么为数据库映射提供的绑定存在问题?

当我单步执行 SQLite.cs 类时,我发现绑定计数为 0:

查询代码:

            using (var dbConn = new SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, AppDBPath), true))
            
                List<ZoneInfo> zoneInfo = dbConn.Query<ZoneInfo>("select * from " + tableName).ToList<ZoneInfo>();
                ObservableCollection<ZoneInfo> zoneInfoCollection = new ObservableCollection<ZoneInfo>(zoneInfo);
                return zoneInfoCollection;
            

数据库映射 POCO:

public class ZoneInfo


    //The ObjectId property is marked as the Primary Key  
    [SQLite.PrimaryKey]
    [Column("objectId")]
    public string ObjectId  get; set; 

    [Column("zone")]
    public string ZoneName  get; set; 

    [Column("tariff_ph")]
    public int? TariffPH   get; set; 

    [Column("tariff_pd")]
    public int? TariffPD  get; set; 

    [Column("restrictions")]
    public string Restrictions  get; set; 

    [Column("days_of_operation")]
    public string DaysOpen  get; set; 

    [Column("hours_of_operation")]
    public string HoursOpen  get; set; 



    public ZoneInfo() 
    

    


    public ZoneInfo(string objectId, string zoneName, int tariffPH, int tariffPD, 
        string restrictions, string daysOpen, string hoursOpen )
    

        ObjectId = objectId;
        ZoneName = zoneName;
        TariffPH = tariffPH;
        TariffPD = tariffPD;
        Restrictions = restrictions;
        DaysOpen = daysOpen;
        HoursOpen = hoursOpen;
    




数据库架构 -

【问题讨论】:

【参考方案1】:

您的“数据库映射 POCO”与您的数据库架构不匹配。

[Column("tariff_ph")]
public int? TariffPH   get; set; 

[Column("tariff_pd")]
public int? TariffPD  get; set; 

应该是

[Column("tariff_ph")]
public float TariffPH   get; set; 

[Column("tariff_pd")]
public int TariffPD  get; set; 

因为您的数据集中有浮点值,并且它们都不是 NULLABLE。

我在这里有一个最小的例子Update Record in Sqlite Window Phone 8,它创建数据库、插入一些数据并更新数据库。看看这是否对您有帮助,但我很确定您的数据不正确。

【讨论】:

我终于通过重新安装应用程序在我的测试设备上工作,该应用程序又复制了数据库的 resh 副本。但是当我将应用程序部署到商店时,查询不会触发。任何想法为什么会这样?在这里创建了一个问题:***.com/questions/37634111/…

以上是关于如何解决 SQLite 查询的空绑定?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 sqlite 游标中获取列值?

Sqlite 参数化 模糊查询 解决方案

C# 中的简单 SQLite ORM,代码有效,但如何解决竞争条件

android如何绑定sqlite最新版本

如何在 SQLite 查询中使用正则表达式?

如何在声纳中解决这个“可能的空指针取消引用”关键问题?