【发布时间】:2013-11-29 17:33:09
【问题描述】:
我在 Windows Phone 8 项目上使用 sqlite-winrt 来处理 SQLite 数据库。效果很好,除了附加数据库的问题:
有两个相同的数据库(相同的表,不同的内容)A和B。B附加到A:
database dbA = new Database(dbAFile);
await dbA.OpenAsync();
await dbA.ExecuteStatementAsync("ATTACH B.sqlite AS AttachDB");
query = "SELECT * FROM SomeTable";
using (Statement sqlStatement = await dbA.PrepareStatementAsync(query)) {
while (await sqlStatement.StepAsync()) {
...List Content of SomeTable in Table A --> No Problem
}
}
query = "SELECT * FROM AttachDB.SomeTable";
using (Statement sqlStatement = await dbA.PrepareStatementAsync(query)) {
while (await sqlStatement.StepAsync()) {
...List Content of SomeTable in Table B --> Crash in PrepareStatementAsync
}
}
当用于访问附加数据库中的表“SomeTable”时,在准备语句时会引发异常。异常没有显示问题的根源,但我设法得到了 SQL 错误消息,即:
“没有这样的表:AttachDB.SomeTable”
当然数据库 B 有一个表“SomeTable”。当我直接连接到这个数据库时,我可以毫无问题地访问表“SomeTable”。
我认为 B 与 A 具有完全相同的表并在 B 中创建表“OnlyInB”可能是一个问题。但访问 AttachDB.OnlyInB 也失败。根据sqlite doc,当表名唯一时,可以跳过数据库名。因此“OnlyInB”也应该起作用。但不是。 "SELECT * FROM OnlyInB" 显示 "no such table: OnlyInB"
我使用 Firefox 的“SQLite Manager”扩展测试相同的场景(打开 A,附加,B...)从 AttachDB.SomeTable 或 B 中的任何其他表中选择数据在那里没有问题。该问题仅在使用 sqlite-winrt 时出现。
我还测试了将 B 连接到 A 是否有任何问题。但没有。当我尝试附加 B 两次或再次使用“AttachDB”附加第三个数据库时,会显示一个错误,清楚地表明 B 已正确附加到 A。附加似乎工作完美,除了我无法访问任何表的问题乙...
有什么建议吗? 非常感谢!
【问题讨论】:
标签: c# sqlite windows-phone-8