2011-07-10 8 views
0

接続が確立されたときにメインバックエンドに同期機能を持つオフライン対応のスマートクライアントを作成中です。補足として、私はMicrosoft Sync Frameworkを検討しましたが、私は実際に片方向にしか進んでいないので、私はそれを正当化するのに十分に私を購入する気はありませんでした。SQLite vs.SQLCEデプロイメント

私が持っている質問は、SQLiteとSQLCEとClickOnceのデプロイメントに関するものです。以前はSQLiteを扱っていましたが(印象的な小さなツール)、私はClickOnceを扱ってきましたが、決して一緒にはしませんでした。 ClickOnceを使用してアプリケーション用のインストーラをセットアップした場合、アップグレード中にローカルデータベースが消去されないようにするにはどうすればよいですか?インストーラの一部としてデータベース(テーブル構造など)をアップグレードすることは可能ですか?それとも、このような目的でSQLCEを使用する方が良いでしょうか?私は間違いなく、私がやっていることに対してオーバーヘッドが余りにも高すぎるので、SQL Expressや何かをインストールするルートに行きたくはありません。

+0

なぜダウンボートですか? –

答えて

1

私は決して持っていない、SQLLiteについて話すことはできませんそれをデプロイしましたが、SQLCEに関する情報があります。

まず、前提条件として展開する必要はありません。あなたはあなたのプロジェクトにdllを含めることができます。どのように説明されているthis articleをチェックすることができます。これにより、どのバージョンが使用されているかについて有限の制御が可能になり、それ自体をインストールする必要はありません。

第2に、データベースをデータファイルとして展開し、ClickOnceで管理することはお勧めしません。そのファイルを変更すると、ClickOnceは再度そのファイルを公開し、データディレクトリに配置します。それは前のものをとり、\ preサブフォルダに入れます。それを処理するコードがない場合、ユーザーはデータを失います。したがって、テーブル構造を見るためにデータベースファイルを開くと、データが消失しているというあなたのユーザーからの電話を受けることに不愉快な驚きを感じるかもしれません。

更新の間にデータを保持する必要がある場合は、アプリケーションを初めて実行したときにデータベースを[LocalApplicationData]フォルダに移動して参照することをお勧めします。次に、構造体を更新する必要がある場合は、プログラムでそれらを実行し、発生するタイミングを制御できます。 This articleは、これを行う方法とその理由を説明しています。

LocalApplicationDataにデータを格納するもう1つの利点は、ユーザーに問題があり、アプリケーションをアンインストールして再インストールする必要がある場合、データが保持されることです。

+0

あなたがしたそのブログ投稿は、まさに私が探していたようなものです - ありがとう! – RubyHaus

0

組み込みデータベースに関係なく、データベースファイル(.sqliteまたは.sdf)をプロジェクトの一部にすることで、そのファイルのビルドアクションとコピー先の出力ディレクトリプロパティを使用できるようになりますインストール/アップデート中にファイルの処理を制御します。

「コピーしない」を選択した場合、データベースファイルはコピーされません。「新しい場合はコピーする」を選択すると、データベースファイルの新しいバージョンがある場合にのみコピーされます。

あなたは少し実験する必要がありますが、これらの2つのプロパティを使用することにより、あなたはどのように、いつデータベースファイルが展開されている/更新の完全な制御を持つことができます...

関連する問題