2010-12-18 5 views
1

データベースアプリケーションのエクスポート機能を実装しようとしています。私はC#を使用しているし、使用しているC#のSQliteラッパーを持っています。私がデータベースの概念/一般的な使い方を知らないことを許してください、これは私の最初のデータベースアプリケーションです。C#、ベストプラクティスを使用したSQLiteデータベースのエクスポート

エクスポート: 簡単に言えば、SQLiteデータベースは1つのs3dbファイルに格納されています。したがって、エクスポートするには、System.IO.File.Copyを使用してそのファイルをコピーするだけです。それはこれを行うための最善の方法ですか?最後に、エクスポートでは、ファイルをコピーする前にすべてのデータベース接続を閉じる必要がありますか?繰り返しますが、この状況のベストプラクティスは大きな助けになるでしょう...私はこの状況でいくつかのことを確信しています。たとえば...

データベースが膨大でコピーに時間がかかる場合はどうなりますか?ユーザーはエクスポートを開始してすぐにデータベースに何かを挿入しようとする可能性がありますが、これは明らかに問題になります。コピー中にプログラムをロックする必要がありますか?

いつもありがとうございました。

+0

ファイルをコピーすることは正しい方法ですが、モーダルウィンドウフォームを作成してプログレスバーを表示するにはどうすればよいですか? – CODe

+1

これは別の質問です... –

答えて

1

SQL Server CEと同様の機能を実装しました。これは、概念上のsqliteと非常によく似ています。それを処理する最も安全な方法は次のとおりです。すべてのデータベース接続を終了し、ユーザーがこれ以上開くことを防ぎます(バックアップの進行状況を示すアプリケーション全体のモーダルウィンドウでこれを処理しました)。繰り返しますが、私はsqlite自体では行っていませんが、SQL Server CEでは単純なファイルコピーでした。

WinFormsアプリケーション用のアプリケーション全体でウィンドウをモーダルにするには、MessageBox.Show()を使い、所有者を指定しないでください。

+0

MessageBox.Show()どこですか?私は進捗状況を示すためにWindowsフォームを作成しましたが、動かなくてはならないことを計画していました。私はProgressFormのフォームコードでそれを呼びますか?投稿していただきありがとうございます! – CODe

+0

申し訳ありませんが、私はまっすぐ考えていませんでした。アプリケーション全体にフォームモーダルを表示するには、そのフォームのインスタンスを作成し、Show()を呼び出す代わりにShowDialog()を呼び出しますが、所有者を渡さない限り同じルールが適用され、全体がモーダルになります応用。おそらくダイアログを動かすことはできないかもしれませんが、それはユーザーとして私を苛立たせるでしょう。コントロールボックスを外してフォームが起動するすべての終了イベントを取り消すことで、クローズ不可能にすることができます。ユーザーが強制的にアプリケーション全体をシャットダウンするのを止めるものはありません。 –

0

ファイルをコピーする利点は、データベースを再作成してレコードを挿入する代わりに、確実に多くの時間がかかることです。アプリでソースまたはエクスポートのいずれかを変更できる場合は、必ずその操作をロックする必要があります。

0

コピーは最も簡単な方法ですが、それが最善の方法であるかどうかはわかりません。コピー中にファイルをロックしていることを確認する必要はありませんが、使用している特定のSQLiteバージョンのバイナリ表現よりも移植性の高いフォーマットにデータをダンプすることができます。

すべてのデータをファイルにダンプすることは、コピーと同じくらい簡単です。

たとえば、「ASCIIテキストファイルへのデータベース全体の変換」(this page)を参照してください。

関連する問題