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

时间:2016-03-09 21:16:44

标签: c# database sqlite orm windows-phone-8.1

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

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

  

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

     

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

     

3.通过查询数据库的代码,发现 db绑定为空。 (这表明我的POCO中的字段映射存在问题)

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

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

当我通过SQLite.cs类时,我发现绑定计数为0:

enter image description here

查询代码:

            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;
            }

DB Mapping 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;
    }



}

数据库架构 -

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

您的“数据库映射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; }

由于数据集中有浮点值,因此它们都是不可用的。

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