无法连接到SQLite.Net中的数据库 - iOS,Xamarin

时间:2017-02-03 09:55:51

标签: sqlite xamarin xamarin.ios sqlite-net

在iOS上使用SQLite.Net我与主数据库有异步连接:

private static SQLiteAsyncConnection asyncConnection  = new SQLiteAsyncConnection ( ..... );

此连接适用于主数据库。

在我的iOS Documents目录中,我有一个主数据库和一个名为DefaultDatabase.db3的辅助数据库。

以下代码尝试附加辅助数据库并删除附加数据库的ParticipantGroup表中的所有行失败:

string databaseFilePath = (NSFileManager.DefaultManager.GetUrls
    (NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomain.User) [0]).ToString ();
string fullDefaultDatabasePath = ( Path.Combine ( databaseFilePath,
    "DefaultDatabase.db3" ) ).Remove ( 0, 7 );  // Strip "file://"
string attachQuery = "ATTACH DATABASE " + "'" + fullDefaultDatabasePath + "'" + " AS 'D'";
int attachResult = await asyncConnection.ExecuteAsync (attachQuery);
string deleteQuery = "DELETE FROM 'D.ParticipantGroup'";
await asyncConnection.ExecuteAsync (deleteQuery);

当执行最后一行时,我得到:

SQLite.Net.SQLiteException: no such table: D.ParticipantGroup

attachQuery的值是:

ATTACH DATABASE '/var/mobile/Containers/Data/Application/21A23990-4EE9-404F-AF09-DE206E66D682/Documents/DefaultDatabase.db3' AS 'D'

除文件名外,查询中的路径与创建asyncConnection时使用的路径相同。

attachResult的值为0,无论谁意味着 - 我无法找到任何文档但它可能意味着失败。 (我注意到,当你在attachQuery中提供一个荒谬的文件名时,没有任何抱怨,并且返回0。如果路径以file://为前缀,则报告语法错误。)

一旦发生异常,我就通过在iTunes中查看辅助数据库来验证辅助数据库是否位于Documents目录中。我还验证了参与者组表的存在,然后使用iTunes导出子数据库并使用Firefox SQLite Manager插件进行检查。

做了很多谷歌搜索并且已经没有关于问题所在的想法。建议赞赏!

版本信息: SQLite.Net.Platform.XamarinIOS 2.5.1,iOS 10.2.1

0 个答案:

没有答案