2009-07-15 41 views
1

我正在創建一個具有自己的數據庫模式的項目。其他將使用由我的項目創建的DLL的項目將在我的DLL所需的數據庫中具有相同的模式。 但是,如果需要爲我更改模式,問題就出現了,對於每個將數據庫中的所有更改進行更改的客戶端都不是一個好的選擇。如何創建安裝程序以實現數據庫模式更改?

所以,我想創建一個安裝程序,這將讓他們自動做到這一點... 任何建議,想法表示讚賞..

回答

1

看看這個工具 - >http://www.liquibase.org/ 它允許數據庫遷移腳本

自動化
+0

Liquibase是作爲一個Java庫實現的,但它應該可以作爲一個dll使用ikvm運行 – 2009-07-18 04:00:09

0

我會產生上,如果尚未應用的變化檢查數據庫架構中的每個變化的變化srcipt和我的DLL或與安裝的應用程序,將更新的DLL和運行所有的更改腳本出貨

+0

謝謝親愛的..但如何將一個DLL自己運行腳本,只需將其添加到項目中?有道理..沒有?? – Manish 2009-07-15 13:23:08

+0

您可以在數據庫中維護相應DLL的版本以及此版本的更新日期。 SQL更改腳本可以嵌入到DLL資源中。在應用程序啓動時(可能處於其中一個類的靜態構造函數中),可以檢查版本是否相應,如果不是 - 進行必要的更改 – 2009-07-15 13:38:46

0

你可能是我們e WiX創建安裝程序:GAC對您的程序集只是一個選項,您可以針對數據庫執行SQL腳本。

0

該解決方案使用Visual Studio 2008中的安裝項目,並利用.NET框架中的內建Installer類。其他鏈接可以參見herehere

這裏是做什麼基本輪廓:

  1. 添加Installer類實例將被安裝到客戶端的PC
  2. 項目添加安裝項目,將應用程序安裝到客戶端的PC
  3. 定義安裝過程中某些點將引發的操作
  4. 覆蓋Installer類的相關方法以從最終用戶durin獲取數據庫連接詳細信息摹應用程序安裝
  5. 保持數據庫連接設置(在卸載的情況下)
  6. 安裝程序的環境中運行您的自定義的方法/類/可執行文件,並做必須做什麼

這裏有一個一步

  1. 添加Installer類:an 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

如果您的安裝可以調用,您可以創建一個批處理文件,不只是遵循一個簡單的批處理文件:

  1. 使用OSQL來查詢架構版本號的表。在這種情況下,讓我們說表中存儲了「3」。
  2. 使用OSQL再次運行的下一個版本更新,一個名爲4.SQL
  3. 使用OSQL更新的版本號
  4. 然後,如果5.sql存在做下一個,等
相關問題