2

アプリケーションを作成しましたC#。このアプリケーションは、最初の起動時にデータベースを作成します。databaseこれはSQLiteDatabase、プロジェクトフォルダーに保存されます。これを埋めるプロセスはdatabase、ミッドレンジのノートブックで約5〜10秒かかります。そのため、低予算のノートブックでは遅くなります。大きなチャンスはありませんが、作成中に誰かがアプリケーションを強制的に閉じた場合はどうなりますdatabaseか?または、停電が発生した場合はどうなりますか?この結果は壊れた状態で出てきますがdatabase、これは機能しません。

Database私は自分の入力を作成していてc#、から入力しています。これはとc#内で発生します。内のコードが呼び出されるたびに行う必要がありますか?私のアプリケーションは、アプリケーションの最初に、すでに「はい」または「いいえ」があるかどうかをチェックしますか?ない場合は作成されます。trycatchdeleteDatabasecatchdatabase

私は何をすべきか?エラーが発生Deleteしたとき(コードがトラフになります)、または誰かが私の問題に対してより良い解決策を持っていますか?databasecatch

前もって感謝します!

編集:

いくつかの答えが私に与えられました:

次のコードを見ましたが、このコードをどのように使用できますか?データベースを作成するコードをCallAMethodThatDoesSomeWorkメソッド内に配置する必要がありますか?

using(TransactionScope tran = new TransactionScope()) {
    CallAMethodThatDoesSomeWork();
    CallAMethodThatDoesSomeMoreWork();
    tran.Complete();
}
4

3 に答える 3

2

トランザクションを使用し、その下でデータベースを使用するすべてのコマンドを作成する必要があります。アプリケーションがクラッシュした場合、何も作成されません。これは標準的なアプローチです。たとえば、ここを参照してください

于 2013-03-06T08:00:55.980 に答える
2

Sqlite はtransactionsをサポートしているようです。したがって、トランザクションを開いてからデータを入力し、COMMITそれがすべて完了した場合にのみ実行します。

アプリケーションが起動するたびに、データベースにデータがないかどうかを確実に確認できます (この場合、最後にデータを入力しようとしたときに何か問題が発生した可能性があります)。

于 2013-03-06T08:01:29.847 に答える
0

begin と commit トランザクションを使用しないのはなぜですか? エラーが発生した場合は、トランザクションをロールバックします。

取引の詳細については、以下のリンクを参照してください。

http://www.sqlite.org/lang_transaction.html

于 2013-03-06T08:06:07.887 に答える