我使用SQLite libs和SQLite.Net查询Windows Phone 8.1项目中的现有数据库。到目前为止,与db的连接正常,但返回的记录为空。
我采取了通常的调试步骤 -
1.检查映射到我的数据库模式中名称的绑定类型和名称。
2.验证数据库中存在的数据。
3.通过查询数据库的代码,发现 db绑定为空。 (这表明我的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;
}
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;
}
}
数据库架构 -
答案 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,它创建数据库,插入一些数据并更新数据库。看看这对你有帮助,但我很确定你的数据不正确。