2016-03-02 154 views
1

概述: 我正在使用SQLLite查詢Windows Phone 8.1解決方案中的現有數據庫。我已經調整了這個solution來將數據庫數據讀回我的項目。但是當我使用數據庫連接調用ToList()時,我得到一個沒有這樣的數據庫錯誤的如何解決SQLLite「沒有這樣的表」的錯誤?

到目前爲止,我已經附加數據庫文件和我的DBHelper類使用下面的代碼來查詢數據傳回:

 using (var dbConn = new SQLiteConnection(dbPath)) 
     { 
      //No such table error thrown here -> 
      List<ZoneInfo> zoneInfo = dbConn.Table<ZoneInfo>().ToList<ZoneInfo>(); 
      ObservableCollection<ZoneInfo> zoneInfoCollection = new ObservableCollection<ZoneInfo>(zoneInfo); 
      return zoneInfoCollection; 
     } 

這是完整的DBHelper類從我的解決方法參考現有的數據庫文件和將其複製到設備的本地文件夾。 DB文件本身是here

調試步驟:

  • 我回顧了區信息類的屬性,以確定它們與該類型/名稱每個字段在下面的DB模式匹配,和他們相匹配。
  • dbPath名稱與附加的數據庫名稱相匹配,所以這也不是問題。
  • 我還發現一個similar question與Android上的SQLLite相關,這表明它可能是我在桌面上查詢時遇到的一個問題。
  • 我還考察了dbconn變量,它讓我在錯誤的詳細信息:

enter image description here 問:

我應該採取什麼步驟來調試SQLLite「沒有表」的錯誤進一步?

異常詳情: 異常的確切細節是如下這告訴我不存在這樣的區信息表:

SQLite.SQLiteException was unhandled by user code 
    HResult=-2146233088 
    Message=no such table: ZoneInfo 
    Source=Parking Tag Picker WRT 
    StackTrace: 
     at SQLite.SQLite3.Prepare2(IntPtr db, String query) 
     at SQLite.SQLiteCommand.Prepare() 
     at SQLite.SQLiteCommand.<ExecuteDeferredQuery>d__0`1.MoveNext() 
     at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
     at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
     at SQLite.SQLiteCommand.ExecuteQuery[T]() 
     at SQLite.TableQuery`1.GetEnumerator() 
     at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
     at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
     at Parking_Tag_Picker_WRT.Helpers.DatabaseHelper.ReadZones(String dbPath) 
     at Parking_Tag_Picker_WRT.ViewModel.TagRequestViewModel.InitZoneInfoAsync() 
     at Parking_Tag_Picker_WRT.TagRequestPage.OnNavigatedTo(NavigationEventArgs e) 
    InnerException: 

區信息類別:(DB中的數據映射到一個類)

public class ZoneInfo 
{ 

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

    [Column("results_list_zone")] 
    public string ZoneName { get; set; } 

    [Column("results_list_tariff_ph")] 
    public int? TariffPH { get; set; } 

    [Column("results_list_tariff_pd")] 
    public int? TariffPD { get; set; } 

    [Column("results_list_restrictions")] 
    public string Restrictions { get; set; } 

    [Column("results_list_days_of_operation")] 
    public string DaysOpen { get; set; } 

    [Column("results_list_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; 
    } 



} 

DB模式:

enter image description here

DB位置的解決方案:

enter image description here

+0

我沒有找到數據庫中的ZoneInfo表。 –

+0

確定沒有,這是我的數據庫應該映射到的POCO類的名稱。 是否應該與我的db文件名相同? DublinCityCouncilTable –

回答

2

根據您的GitHub庫您dbpath僅代表相對路徑正確Databases/DublinCityCouncilTable.db。現在創建你的連接,你需要提供絕對路徑到你的複製數據庫,這將是

using (var dbConn = new SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path,@"Databases\DublinCityCouncilTable.db"), true)) 
+0

我再看看我的代碼..需要按照上面的示例重新修改它。如果需要,我會將其標記爲已接受併發布另一個問題。 –

+0

我從你的編輯發佈了一個新問題 - http://stackoverflow.com/questions/35808724/how-to-resolve-an-incorrect-path-to-sqlite-database –

相關問題