2016-11-16 13 views
0

私のアプリケーションのコードは次のようになります。SQLiteでSQL文を組み合わせることはできますか?

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"); 

これらの3つのステートメントは、一つにまとめることはできますか?それらのうちのどれかが失敗すると、私はロールバックできる方法もありますか?声明の後に「;」を付ける必要がありますか?それらを組み合わせることができたり、そのような "行く"か何かを使用することができますか?

+0

ステートメントにセミコロンをつけて文字列を組み合わせようとしましたか? –

答えて

2

sqliteは、すべてのコマンドを別々のトランザクションで実行します。あなただけの1でそれを実行して、何かがうまくいかない場合はロールバックする必要があります。

try 
{ 
    db2.BeginTransaction(); 
    //executions go here 
    db2.Commit(); 
} 
catch (Exception ex) 
{ 
    db2.Rollback(); 
} 

組み合わせるクエリについて、あなたはロールバックのためにそれらを結合したいならば、私の例では、うまくやるだろう、あなたはとあなたのコードを残すことができますそうです。そうでない場合は、1つの文字列でセミコロンと組み合わせてください。

関連する問題