2010-02-20 32 views
4

我目前正在研究一個包含使用SQLServer的項目。我想知道當我安裝軟件構建數據庫時應採用什麼策略?我需要設置表,存儲過程和用戶​​。如何使用.NET安裝和設置數據庫?

我的軟件是否需要檢查啓動以查看數據庫是否存在,然後如果不存在,創建它? 當我安裝SQLServer時,有什麼方法可以實現自動化嗎?

謝謝。

編輯 好了,現在我有很多很好的解決方案,但我真的尋找一個解決方案(免費或開源將是真棒),讓我來部署需要SQLServer的是新鮮的新應用根據軟件的需要進行安裝和設置。

+0

我應該確定這是用於部署,並且在安裝之後,我不必再次這樣做,但是它應該在每次第一次安裝該軟件時都這樣做。 – Drahakar 2010-02-20 21:18:44

回答

1

您可以使用像Migrator.Net這樣的遷移框架,然後每次啓動應用程序時都可以運行遷移。這種方法的好處在於,您可以在發佈新版本軟件時更新數據庫。

去看看他們的Getting started頁面。這可能會清除這個概念。

我已成功使用此方法來解決您遇到的問題。

+0

這是一件好事,我很高興知道這樣的工具存在,但它似乎不支持第一次安裝數據庫:S – Drahakar 2010-02-20 19:38:44

+0

那麼,您必須創建代碼來檢查DB上是否存在服務器,並創建空白數據庫。之後,您只需將您的遷移到空白數據庫。所以在僞代碼中:if(!DB.Exists)DB.Create(); Migrations.Apply();我希望這有幫助。 – 2010-02-21 08:36:34

1

你用SQL腳本完成所有這些。然後你的安裝程序會針對客戶的SQL Server運行它們。

1

您可以編寫一個只在對象不存在時才創建的T-SQL腳本。對於數據庫:

if db_id('dbname') is null 
    create database dbname 

對於在存儲過程(見MSDN對象類型的列表):

if object_id('spname', 'P') is null 
    exec ('create procedure dbo.spname as select 1') 
go 
alter procedure dbo.spname 
as 
<procedure definition> 

關於這些腳本的好處是,他們運行多次不創建問題 - 所有對象都已經存在,所以腳本不會再做任何事情。

+0

所以你說我應該檢查數據庫是否存在,如果不存在,運行一個腳本是嗎? – Drahakar 2010-02-20 21:19:30

+0

創建數據庫確實需要DBO權限,因此您只能在安裝程序中執行該操作。在安裝程序中,即使對於連續安裝,腳本也可以運行。它不會爲已經存在的對象做任何事情。 – Andomar 2010-02-20 22:33:09

3

RedGate軟件提供SQL Packager它可以讓你選擇生成一個腳本/ .exe來部署整個數據庫,包括從一個單一的.exe文件中的一切(存儲過程,表等)。如果你能負擔得起,並希望有簡單的方法來做到這一點(而無需自己動手)是去在您的客戶羣 ;-)

  • 容易轉出數據庫更新的方式
  • 腳本和壓縮你的架構和準確的數據快速
  • 包裝任何現有的SQL腳本作爲一個.exe或推出一個C#項目
  • 簡化部署和更新SQL Server 2000中,2005年和2008年
0

如果您使用的是MS SQL Server,那麼設置服務器非常簡單。至於創建數據庫和表格,通常只做一次。數據庫的重點在於數據是持久的,所以如果有可能數據庫不存在,你可能會遇到一個重大的穩定性問題,或者b)不需要一個實際的數據庫。

設計數據庫,表格和過程是軟件開發過程的一個完整組件。當我這樣做時,我通常將所有創建腳本保存在源代碼管理中。創建完成後,您將編寫程序,使其假定數據庫已經存在 - 檢查連通性是一回事,但程序不應該認爲根本沒有數據庫。

+0

重點是能夠首次自動設置它。你是否說我應該爲「首次使用者」提供一個工具來首先創建數據庫? – Drahakar 2010-02-20 21:17:19

0

你可以從db中存在的所有對象中創建一個腳本。之後,您可以從您的代碼運行此腳本。

當您在sql server中使用腳本嚮導創建數據庫腳本時,在「選擇腳本選項」部分中將「包括如果不存在」設置爲yes。只有在db不存在的情況下才能完成此項工作。