在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