【问题标题】:I cannot create SQLiteConnection in PCL version of Sqlite.net on WP8我无法在 WP8 上的 Sqlite.net 的 PCL 版本中创建 SQLiteConnection
【发布时间】:2014-01-01 22:27:51
【问题描述】:

我正在使用来自https://github.com/oysteinkrog/SQLite.Net-PCL 的 Sqlite.net 的 PCL 版本 由于某些原因,下面的代码在 WP8 上不起作用:

var sqliteFilename = Path.Combine(ApplicationData.Current.LocalFolder.Path, "MyDB.db3");
var db = new SQLiteConnection(new SQLitePlatformWP8CSharp(), sqliteFilename);

我收到此错误:

An exception of type 'SQLite.Net.SQLiteException' occurred in SQLite.Net.DLL but was not handled in user code

Additional information: Could not open database file: C:\Data\Users\DefApps\AppData\{149B7F85-2C71-4BEF-984F-903BA7DB80DA}\Local\MyDB.db3 (CannotOpen)

我做错了什么? 谢谢!!!

【问题讨论】:

    标签: sqlite windows-phone-8 portable-class-library


    【解决方案1】:

    @Sergey-Chesalin 感谢您的回答。我检查并发现它应该在它不可用时创建数据库。经过我的研究,我发现了为什么它不能正常工作。

    由于某些原因,他们在连接字符串中添加了额外的符号,请参阅 Line 121 in SQLiteConnection.csLine 196 in SQLiteConnection.cs。也许它在 ISQLiteApi 实现的 iOS/Android/WinRT 版本中按预期工作,但它在 Windows Phone 上不能正常工作。

    所以为了解决这个问题,我改变了这一行:

    string dbFileName = Encoding.UTF8.GetString(filename, 0, filename.Length);
    

    到这里:

    string dbFileName = Encoding.UTF8.GetString(filename, 0, filename.Length - 1);
    

    SQLite.Net-PCL/blob/master/src/SQLite.Net.Platform.WindowsPhone8.CSharpSqlite/SQLiteApiWP8.cs line 12

    【讨论】:

      【解决方案2】:

      您是否将数据库文件文件标记为项目中的内容? 您可以使用ISETool 或使用this 之类的GUI 来探索已部署的项目,以通过此路径检查文件是否存在。

      【讨论】:

      • 我认为如果新数据库不存在,则必须创建它。我说的对吗?
      • @Sergey 原始 SQLite.net 在数据库不可用时创建数据库,但是这个 fork 使用不同的实现,所以你可以检查自己并将这个库的源代码添加到你的项目中,并检查调试器中发生了什么.我使用了不同的SQLite implementation。但是如果你需要存储大量数据,SQLite 会很慢。在优化过程中,我发现 WP 上的反射操作异常缓慢。
      • @Sergey 也许您可以尝试不同的命名方案来访问隔离存储,因为库在下面使用 Silverlight 而不是 WP8 库。两个变体是:“isostore:/MyDB.db3”和“ms-appdata:///local/MyDB.db3”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 2015-12-15
      • 2015-08-04
      • 1970-01-01
      相关资源
      最近更新 更多