在上一篇项目管理实践【五】自动编译和发布网站中,我们讲解了如何使用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】并同步做了比较详细的讲解,大家可以做个参考!

如果你对我讲解的这些内容不熟悉,建议你从头开始看这个系列的教程:项目管理实践系列教程

转自:http://www.cnblogs.com/ttzhang/archive/2008/11/11/1331034.html

项目管理实践【六】自动同步数据库【Using Visual Studio with Source Control System to synchronize database automatically】的更多相关文章

  1. 项目管理实践【五】自动编译和发布网站【Using Visual Studio with Source Control System to build and publish website automatically】

    在上一篇教程项目管理实践[三]每日构建[Daily Build Using CruiseControl.NET and MSBuild] 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目 ...

  2. 每次打开VS都报错:我们无法自动填充你的 Visual Studio Team Services 帐户

    我们无法自动填充你的 Visual Studio Team Services 帐户.遇到下面的错误: TF400813: Resource not available for anonymous ac ...

  3. Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

    前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...

  4. 六、Note开发工具Visual Studio Code下载安装以及Visual Studio Code的使用

    专业的人干专业的事,我们搞Node总不能真的使用文本编辑器傻乎乎的搞吧,文本编辑器来开发Node程序,效率太低,运行Node程序还需要在命令行单独敲命令.如果还需要调试程序,就更加麻烦了.所以我们需要 ...

  5. Visual Studio 2008 – ASP.NET “System.Runtime.InteropServices.COMException”

    The Issue When openning an existing ASP.NET project for the first time in Visual Studio 2008 it retu ...

  6. Visual Studio 2013 ReportViewer Control

    最近需要给学生讲报表,.NET的自然就是选择RDLC了. 因为学生比赛是用Visual Studio 2013,所以我在自己的笔记本上安装了Visual Studio 2013(平常是用2010),安 ...

  7. Hibernate由model类自动同步数据库表结构

    在开发中遇到了个问题,每次测试数据库增加表结构的时候,本地pull下最新代码导致启动报错,上网搜了快速解决办法---->hibernate 配置属性中,hibernate.hbm2ddl.aut ...

  8. visual studio 调试时遇到 System.BadImageFormatException

    System.BadImageFormatException”类型的未经处理的异常在 未知模块. 中发生 其他信息: 未能加载文件或程序集“SendYourIP.exe”或它的某一个依赖项.生成此程序 ...

  9. Git Extensions 和 Tortoisegit 到底是什么?Git For VS(Git For Visual Studio)(Visual Studio 中使用 Git)

    前言: 我们使用 Git 作为版本控制的朋友们,一定都熟悉 Git Extensions 和 Tortoisegit 两款工具,但是对于初学者,可能就不那么了解了. 当然如果有幸,你接触过 SVN , ...

随机推荐

  1. 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版

    一.前言 多条件查询分页以及排序  每个系统里都会有这个的代码 做好这块 可以大大提高开发效率  所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...

  2. ajax写法

    $.ajax({ type:'post', url:'<%=path%>/login', cache:false, dataType:'json', success:function(da ...

  3. C#模板打印excel

    using Microsoft.Office.Interop.Excel; //引用   public void PrintPriviewExcelFile(string filePath) {    ...

  4. invalid receiver type

    Because in a case like this: type I int type P *I func (i I) Get() int { return int(i) } func (p P) ...

  5. PHP 分析1

    D:\wamp64\www\practice test 3: PHP 显示乱码 http://localhost/practice/ex1_5_stu.php <html><meta ...

  6. 集线器(HUB),交换机,和路由器的区别

    交换机与集线器的区别从大的方面来看可以分为以下三点: 1.从OSI体系结构来看,集线器属于OSI第一层物理层设备,而交换机属于OSI的第二层数据链路层设备.也就意味着集线器只是对数据的传输起到同步.放 ...

  7. JZ2440串口打印字符作为调试

    /* * 初始化UART0 * 57600,8N1,无流控 */ void uart0_init(void) { GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0 GPH ...

  8. Linux系统VPS/服务器安装WINDOWS桌面环境可以采用的几个方法

    我们公司的几个项目需要在WINDOWS桌面类型的界面操作,哪怕仅有一个浏览器远程操作也是可以的,我们运维部门得到的任务就是需要能在已有的Linux系统的VPS.服务器环境中能够远程操作,至少需要能可以 ...

  9. CodeForces 703D Mishka and Interesting sum

    异或运算性质,离线操作,区间求异或和. 直接求区间出现偶数次数的异或和并不好算,需要计算反面. 首先,很容易求解区间异或和,记为$P$. 例如下面这个序列,$P = A[1]xorA[2]xorA[3 ...

  10. SpringMVC 基于注解的Controller @RequestMapping @RequestParam..

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...