2009-07-15 13 views
1

独自のデータベーススキーマを持つプロジェクトを作成しています。私のプロジェクトで作成されたDLLを使用する他のプロジェクトは、自分のDLLに必要なデータベースに同じスキーマを持ちます。 しかし、問題は、私のためにスキーマを変更する必要がある場合、あなたのデータベース内でこれらのすべての変更を行うすべてのクライアントにこれを伝える良い選択肢ではありません。データベーススキーマの変更を実装するためのインストーラの作成方法は?

だから、私は彼らのためにこれを自動的に行いますインストーラを作成したい... 任意の提案、感謝のアイデア..

答えて

1

このツールチェックアウト - >http://www.liquibase.org/ をこれは、データベースの移行スクリプトの自動化を可能に

+0

LiquibaseはJavaライブラリとして実装されていますが、ikvmを使用してDLLとして実行可能にする必要があります –

0

変更がまだ適用されていないかどうかを確認して、データベーススキーマの変更ごとに変更srciptを生成し、DLLまたはDLLをアップデートしてすべての変更スクリプトを実行するインストールアプリケーションと共に出荷します。

+0

おかげさまで、dllはどのようにしてプロジェクトに追加するだけで独自のスクリプトを実行しますか?何か意味がある? – Manish

+0

対応するDLLのバージョンとこのバージョンが更新された日付をデータベースで管理することができます。 SQL変更スクリプトは、DLLリソースに埋め込むことができます。アプリケーションの起動時(クラスの静的なコンストラクタ内にある可能性があります)、バージョンが対応しているかどうかを確認できます。必要な変更を行います。 –

0

あなたは私たちかもしれませんe WiXを使用してインストーラを作成します。アセンブリのGACは単なるオプションであり、データベースに対してSQLスクリプトを実行することができます。

0

このソリューションでは、Visual Studio 2008でセットアッププロジェクトを使用し、.NETフレームワークに組み込まれているInstallerクラスを使用しています。他のリンクはherehereです。

ここで何をするかの基本的なアウトラインです:

  1. がクライアントのにアプリケーションをインストールするセットアッププロジェクトを追加します
  2. クライアントのPCにインストールされますプロジェクトにInstallerクラスのインスタンスを追加します。 PC
  3. インストール中の特定の時点で発生するセットアッププロジェクト内のアクションを定義する
  4. Installerクラスの関連するメソッドをオーバーライドして、エンドユーザーのデータベース接続の詳細を取得するグラムアプリケーションのインストール
  5. インストーラのコンテキスト内でカスタムメソッド/クラス/実行ファイルを実行し、

を行わなければならない何

  • (アンインストールの場合)データベース接続設定を保存ここでステップですステップバイステップガイド:

    1. Installerクラスを追加します:Installerクラスは、インストールされるアプリケーションの内部に収容されなければなりません。 Visual Studioのソリューションエクスプローラで、インストールするアプリケーションを選択し、メニュー項目「プロジェクト - >新規項目の追加 - >インストーラクラス」をクリックします。これにより、 "Installer1"というデフォルトのインストーラークラスが追加されます。
    2. Visual Studioのソリューションエクスプローラで、セットアッププロジェクトを選択し、右クリックします。 [表示 - >カスタムアクション]を選択すると、インストール中に実行されるカスタムアクションが表示されます。 「カスタムアクション」ウィンドウで
    3. 、「インストール」と「アンインストール」
    4. ゴーInstallerクラス(「Installer1」)へとOnBeforeInstallをオーバーライドするためのカスタムアクションを追加します。

    ここで物事がどのように動作するかの擬似コードです:

    [Installer1.cs]

    protected override void OnBeforeInstall(IDictionary savedState) 
    { 
        base.OnBeforeInstall(savedState); 
    
        MessageBox.Show("OnBeforeInstall: " + GetProperties(savedState)); 
    
        using (ConnectionDialog d = new ConnectionDialog()) 
        { 
         d.ShowDialog(); 
    
         savedState["database"] = d.Database; 
         savedState["user"] = d.User; 
         savedState["password"] = d.Password; 
         savedState["integrated"] = d.Integrated; 
        } 
    } 
    

    インストーラによって渡さIDictionaryインスタンスは、ユーザーが読み込むことができ、キー/値ペアのコレクションです関連するデータと比較します。この同じ情報は、OnBeforeUninstallなどの他のメソッドに渡されます。このメソッドは、開発者がデータベースの切り離しや変更のロールバックなどに使用できます。

  • +0

    'ConnectionDialog'クラスはどこですか? –

    0

    あなたのインストーラは以下単にんバッチファイルを作成することができ、単純なバッチファイルを呼び出すことができる場合:

    1. は、スキーマのバージョン番号のテーブルを照会するOSQLを使用します。この場合、テーブルに "3"が格納されているとします。
    2. 使用すると、次回バージョンアップなど4.sql
    3. 使用します。osql 5.sqlは、次のいずれかを実行存在する場合は、バージョン番号
    4. を更新するには、
    というファイルを実行するために、再びOSQL
    関連する問題