如何解决SQLLite“没有这样的表”错误?

时间:2016-03-02 22:13:19

标签: c# sql sqlite windows-phone-8.1 database-schema

概述: 我正在使用SQLLite查询Windows Phone 8.1解决方案中的现有数据库。我已经调整了这个solution来将数据库数据读回我的项目。但当我使用数据库连接调用ToList()时,我得到一个没有这样的数据库错误

到目前为止,我已经附加了数据库文件,我的DBHelper类使用以下代码来查询数据:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="border: 2px solid; background-color: white; margin: 0px;">something</div>

这是完整的DBHelper类,它引用我的解决方案中的现有DB文件并将其复制到设备的本地文件夹。数据库文件本身是here

调试步骤:

  • 我查看了ZoneInfo类属性,以检查它们是否与下面数据库模式中的每个字段的类型/名称匹配,并且它们匹配。
  • dbPath名称与附加的数据库名称匹配,因此也不是问题。
  • 我还在Android上发现了与SQLLite相关的similar question,这表明我的查询可能会出现问题。
  • 我还检查了dbconn变量,它向我显示了有关错误的更多信息:

enter image description here问题:

我应该采取哪些步骤来进一步调试SQLLite“无表”错误?

例外明细: 异常的确切细节如下,告诉我没有这样的ZoneInfo表:

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

ZoneInfo类:(将数据库数据映射到类)

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: 

数据库架构:

enter image description here

解决方案中的数据库位置:

enter image description here

1 个答案:

答案 0 :(得分:3)

根据您的github repo,您​​的dbpath仅代表相对路径Databases/DublinCityCouncilTable.db。现在要创建连接,您需要提供复制的数据库的绝对路径,即

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