我的应用程序代码如下所示:
using SQLite;
using System.Collections.Generic;
using System.Linq;
using Xamarin.Forms;
using System.Diagnostics;
...
...
db2.Execute("DELETE FROM Phrase" +
" WHERE PhraseId NOT IN(SELECT Id FROM PhraseSource)");
db2.Execute("DELETE FROM Phrase" +
" WHERE Modified < (SELECT Modified FROM PhraseSource WHERE Id = Phrase.PhraseId)");
db2.Execute("INSERT OR IGNORE INTO Phrase(CategoryId, PhraseId, English, Romaji, Kana, Kanji, Modified)" +
" SELECT PS.CategoryId, PS.ID, PS.English, PS.Romaji, PS.Kana, PS.Kanji, PS.Modified" +
" FROM PhraseSource AS PS");
这三个陈述可以组合成一个吗?还有一种方法可以回滚,如果它们中的任何一个失败?我是否需要用“;”来表达语句如果他们可以合并或使用“go”或类似的东西?
答案 0 :(得分:2)
sqlite在单独的事务中执行每个命令。你只需要在一个中运行它然后在出现问题时回滚:
try
{
db2.BeginTransaction();
//executions go here
db2.Commit();
}
catch (Exception ex)
{
db2.Rollback();
}
关于组合查询,如果你想将它们组合起来用于回滚,那么我的例子就可以了,你可以保留你的代码。如果没有,那么只需将它们与分号组合在一个字符串中即可。