項目管理實踐六、自動同步數據庫【Using Visual Studio with Source Control Sys

    在上一篇項目管理實踐五、自動編譯和發佈網站中,我們講解了如何使用MSBuild+Robocopy+WebDeployment來自動編譯和部署網站,今天,我們來看一下,如何使用MSBuild +SVN來自動同步數據庫。
    首先,將我們項目中的數據庫文件和數據庫日誌文件放到某個目錄下,這裏放到StartKitDB目錄下,然後在該目錄下新建一個名爲StartKitDB的文本文件,修改擴展名爲proj,實際上,在理論上任何擴展名都可以,然後,使用記事本或其他程序打開文件,將下面的內容複製到其中,保存。
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="All" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- 需要引入MSBuild Community Tasks -->
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<PropertyGroup>
<!--數據庫連接字符串,可以根據需要修改-->
<ConnectionString>Server=.;Integrated Security=True</ConnectionString>
</PropertyGroup>
 
<ItemGroup>
<!--數據庫文件-->
<DBFiles Include="StartKitDB.mdf;StartKitDB_log.ldf"/>
</ItemGroup>
<Target Name="ALL">
<!--重啓SqlServer服務-->
<ServiceController ServiceName="mssqlserver" Action="Restart" />
<!--分離數據庫-->
<Exec Command="OSQL -S . -E -n -Q &quot;EXEC sp_detach_db 'StartKitDB','True'&quot;" IgnoreExitCode="false" />
<!--停止SqlServer服務-->
<ServiceController ServiceName="mssqlserver" Action="Stop" />
<!--刪除舊版本的數據庫文件-->
<Delete Files="C:\StartKitDB\$(DBFiles)" />
<!--複製最新版本的數據庫文件到指定位置-->
<Copy SourceFiles="@(DBFiles)" DestinationFolder="C:\StartKitDB" />
<!--啓動SqlServer服務-->
<ServiceController ServiceName="mssqlserver" Action="Start" />
<!--附加複製過來的最新版本的數據庫文件到數據庫中-->
<Exec Command="OSQL -S . -E -n -Q &quot;EXEC sp_attach_db @dbname = N'StartKitDB',@filename1 = N'C:\StartKitDB\StartKitDB.mdf', @filename2 = N'C:\StartKitDB\StartKitDB_log.ldf'&quot;" IgnoreExitCode="false" />
</Target>
</Project>
    當然了,如果我們希望:當我們提交最新的數據庫文件和日誌文件到服務器後,自動從服務器分離舊版本的數據庫,同時附加最新版本的數據庫,那麼我們就要藉助CCNET和SVN服務器,所以我們首先要把存放數據庫文件、日誌文件及StartKitDB.proj文件的StartKitDB文件夾,納入到我們的版本控制中。但是,如果我們簡單的把這個文件添加到我們的StartKit項目的代碼庫中,那麼,當我們提交數據庫更新時,就會自動編譯整個StartKit項目,而這時候,我們項目可能並沒有更新,所以我們要把數據庫和項目分開爲二個代碼庫。
    我們按照在項目管理實踐二、源代碼控制 中的講解,使用VisualSVN Server添加一個代碼庫【Repository】StartKitDB,然後,使用TortoiseSVN把上面的三個文件遷入到SVN服務器上,最後,按照項目管理實踐三、每日構建 的講解,在CCNET上添加一個項目【Project】,一定根據實際情況修改相應的文件路徑,把tasks的子節點msbuild下的projectFile節點值配置爲我們上面新建的StartKitDB.proj文件。
    注意:你在CCNET中配置把SVN服務器上的數據庫文件遷出的位置不要和上面的StartKitDB.proj文件中的位置相同,具體原因嘛?你可以先自己想想!

    OK,搞定啦!你可以提交一次數據庫到SVN服務器,試試看有沒有效果,怎麼樣?成功了吧!嘿嘿…
    這種方法適合在開發過程中使用,如果我們已經部署了項目或者已經交付給了用戶,那麼用戶可能已經添加和更新的很多數據,此時和我們開發時在SVN上的最新版本也不一致了,這時候考慮到用戶數據的安全,我們可能需要給用戶的是數據庫更新腳本,而且要保證用戶的數據安全,那麼這時候,怎麼辦呢?我在Visual Studio 2008中如何比較二個數據庫的架構【Schema】和數據【Data】並同步做了比較詳細的講解,大家可以做個參考!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章