2013-11-27 35 views
2

我部署了一個C#應用程序,並且我的客戶受益於ClickOnce更新的新部署版本。自動更新SQL Server數據庫模式

但是我更改爲應用程序數據庫模式時遇到問題,因爲客戶無法從自動更新數據庫更改中受益,請給我解決方案如何讓客戶應用程序檢查新版本的數據庫是否可用,然後執行更新。

所以這裏有兩個問題:

  1. 怎麼做了DB模式新版本的客戶應用程序檢查?
  2. 如何執行更新,避免丟失客戶數據只是更新架構?
+0

您使用什麼技術訪問數據庫?您計劃應用哪些模式更改?你使用什麼數據庫? – Dennis

+1

這是sql數據庫(sql server 2008 r2)。 我的意思是改變字段名稱或添加新表格,存儲過程... –

+0

@Dennis任何解決方案plz –

回答

2

我假設每個用戶都有自己的數據庫。在這種情況下,你可以做到以下幾點:

  1. 使用實體框架啓用「自動遷移」:http://msdn.microsoft.com/en-us/data/jj554735.aspx。只要檢測到模型更改,EF就會自動更新數據庫。

  2. 寫遷移手動和使用ClickOnce IsFirstRun功能,在第一時間檢測時,在執行應用程序的新版本 - 然後你可以寫這樣的事情:

public void MigrateData() 
{ 
    if (ApplicationDeployment.IsNetworkDeployed) 
    { 
     if (ApplicationDeployment.CurrentDeployment.IsFirstRun) 
     { 
      try 
      { 
       NS.Logic.DAL.EventDataAccessor.Create().MigrateFromPreviousVersion(); 
       NS.Logic.DAL.UserDataAccessor.Create().MigrateFromPreviousVersion(); 
       // and do the same for all affected accessors 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Could not migrate data from previous version. Please contact the developer.", 
        "My app", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
    } 
} 

和那麼對於MigrateFromPreviousVersion()中的每個訪問器,您可以編寫自己的SQL代碼來更新此特定版本的應用程序的數據庫。

+0

存儲過程,視圖,觸發器呢? –

+0

是否有可能通過C#中的MainDATASET.xsd更新sql db? –

+0

您需要創建執行遷移的SQL代碼(即「CREATE PROCEDURE ...」等),並在MigrateFromPreviousVersion()調用中執行它。如果您使用ADO.Net - 這篇文章可能會幫助您:http://stackoverflow.com/a/1190832/1246870 – avs099