2012-05-03 34 views
5

我已單獨distibuted幾個客戶端C#.NET應用程序,在一段時間後,我們增加一些新功能或修復了一些bug,並經常使在DB的變化。我使用點擊一次部署方法來更新EXE到我的客戶端PC。 SQL服務器實例已安裝在他們的系統上。執行SQL腳本使用.NET可執行

我想知道我怎麼能與各exe文件更新用更新他們的SQL數據庫。

請記住,這是可能的,一個客戶正在2版本沒有更新,版本3,但第4版發佈時,隨後他更新應用程序。在這種情況下,我需要在他的數據庫上執行兩個腳本。一個3版和其他的當前版本,這是4

感謝

回答

2

假設你有一個存儲過程/腳本,可以更新一個版本到另一個版本,並假設您不能加載其他任何exe文件,將運行它,你爲什麼不只是包括通話時開始運行新版本的?在加載軟件時檢查是否正在使用正確版本的數據庫,如果沒有,則更新它。要處理從第2版到第4版的問題,只要確保數據庫本身能夠跟蹤目前的版本。

+0

所以我需要保持數據庫的所有腳本在我的可執行文件等等每當用戶更新exe時,他們各自的腳本應該可用。 – MegaMind

+0

是的,你必須添加在數據庫中的標誌版本太:) – ykatchou

0

你可以嘗試sqlcmd並調用exe文件從你與數據庫更新應用程序中。

0

這是通過使用「數據庫遷移」最好解決的情況。 .net生態系統中有幾種工具可以幫助你。一些工具帶有一個單獨的跑步者,而其他工具則可以編譯爲一個.net程序集,您可以將其包含在您的項目中。

的例子是:

0

我創建兩個組件要解決這一問題:

1.

WinForms應用程序,分析某個SQL數據庫以及包含scruipt文件SQL解決方案文件夾。然後它將腳本文件計算到SQL對象,並讓我構建一個包含各種腳本文件執行順序的「Manifest.xml」。

的表的腳本文件包含在升級表結構每個版本的說明。

建設者然後複製與清單一起相關的腳本文件到一定的位置。如果我不擔心我的應用程序文件夾過度擁擠,通常我會將它們與我的應用程序一起復制。否則,我將它們壓縮到受密碼保護的7-zip。

2.

的命令行的應用程序,解壓縮(如果需要),並執行該清單。實際的工作是在一個單獨的類庫中完成的,該類庫可以集成到我的應用程序中。

然後在我的應用程序每當我的appversion> dbversion我運行升級。

在菜單時,如果只有一個臨時和生產建立在一個單一的客戶,通常涉及我將手動使用獨立的CLI應用程序沒有。這是推動更新的一種簡單的方法,特別是如果你修改20次,真的不喜歡複製/粘貼他們都到SQL MGT演播室:對