2017-03-16 97 views
0

我有一個項目,我一直在用C#處理本地數據庫,我想發佈。
問題是,每當我發佈一個新版本的操作系統時,數據庫都會被忽略,並且我丟失了所有的數據。 我如何設置項目以便本地數據庫不會被覆蓋?visual studio單擊發布覆蓋LocalDatabase

回答

1

在解決方案資源管理器中選擇.mfd文件,然後進入屬性>高級>複製到輸出目錄,然後選擇「如果更新則複製」。這將使您的數據庫只有在開發過程中對數據庫進行更改時纔會被覆蓋。

enter image description here

0

據我瞭解您的本地數據庫是納入您的部署包中的文件。在此基礎上:

正確的方法

因版本,你可能需要更改數據庫結構或新的功能擴展。所以,我建議從部署包中排除本地數據庫文件。 而是複製數據庫文件使用腳本創建數據庫:

  1. 準備用於創建數據庫(你可能已經擁有它們,因爲你必須準備好數據庫)的SQL腳本。這樣的腳本應該創建數據庫,如果它不存在,更改存儲過程,如果需要更新表格等。
  2. 如果您有一些默認數據,它應該與數據庫一起使用 - 您可以簡單地將它們與腳本一起插入。如果您的初始數據庫很大,並且您不想編寫插入腳本 - 將初始數據庫包含到名稱與活動數據庫不同的部署包中(例如database.initial.ext),並將其手動重命名爲活動數據庫(例如database.ext)在應用程序啓動時(如果此基礎不存在)。
  3. 在應用程序啓動時運行所有創建/更新數據庫的腳本。
  4. 繼續執行您的應用程序。

至於導致你應該有這樣的事情(樣品):

public static void Main(object[] args) 
{ 
    CreateDatabaseIfNotExists(); 
    RunDatabaseUpdateQueries(); 
    InsertInitialDataIfDatabaseNew(); 
    // Rest of your code... 
} 

優點:您將獲得靈活的解決方案,當你提供新的版本可能會改變你的數據庫。 缺點:您必須編寫更新腳本並在應用程序啓動時運行它們。

解決方法

作爲替代擬議流,你可以簡單地做下一個:

  1. 包括數據庫文件到您的部署包用不同的名稱(例如database.initial.ext)。
  2. 在應用程序啓動時重命名數據庫文件以更正其中一個(例如database.ext),如果它不存在。

至於導致你應該有這樣的事情(樣品):

public static void Main(object[] args) 
{ 
    CreateDatabaseIfNotExists(); 
    // Rest of your code... 
} 

優點:你需要免得努力實現這樣的流動。

缺點:的解決方案是不靈活,你將面臨的問題的情況下,如果數據庫結構應該在未來的版本更新。