2009-12-30 37 views
6

是否有一个很好的教程创建一个数据库使用msbuild使用msbuild创建一个sql数据库

jean paul boodhoo它使用nant在this后。 他将在恶性构建文件中使用

<properties> 
    <property name="sqlToolsFolder" value="C:\Program Files\Microsoft SQL Server\90\Tools\Binn"/> 
    <property name="osql.ConnectionString" value="-E"/> 
    <property name="initial.catalog" value="Northwind"/> 
    <property name="config.ConnectionString" value="data source=(local);Integrated Security=SSPI;Initial Catalog=${initial.catalog}"/> 
    <property name="database.path" value="C:\root\development\databases" /> 
    <property name="osql.exe" value="${sqlToolsFolder}\osql.exe" /> 
</properties> 

则可以创建一个使用命令行这样的数据库..

c:\> build builddb 

我安装了MSBuild扩展包,但我能特性没有找到从哪里输入连接字符串连接到数据库

谢谢

分辨

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="constants.proj"/> 
    <Target Name="QueryDb"> 
    <PropertyGroup> 
     <_Command>-Q "SELECT * FROM Users"</_Command> 
     <_Command2>-i test.sql</_Command2> 
    </PropertyGroup> 
    <Exec Command="$(sqlcmd) $(_Command)" /><!----> 
    </Target> 
</Project> 

和Constants.proj看起来像这样

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <sqlToolsFolder>C:\Program Files\Microsoft SQL Server\90\Tools\Binn</sqlToolsFolder> 
    <initialCatalog>NorthwindTest</initialCatalog> 
    <serverInstance>(local)\SQLEXPRESS</serverInstance> 
    <configConnectionString>data source=$(serverInstance);Integrated Security=SSPI;Initial Catalog=$(initialCatalog)</configConnectionString> 
    <osqlExe>"$(sqlToolsFolder)\osql.exe"</osqlExe> 
    <sqlcmd>$(osqlExe) -U someuser -P somepassword -d $(initialCatalog) -S (local)\SQLEXPRESS</sqlcmd> 
    <!--<sqlcmd>$(osqlExe) -E -d $(initialCatalog) -S (local)\SQLEXPRESS</sqlcmd>--> 
    </PropertyGroup> 
</Project> 

然后在VS命令提示运行

的msbuild db.targets /吨:QueryDb

运行的命令是这个 “C:\ Program Files文件\ Microsoft SQL Server的\ 90个\ TOOLS \ BINN \ OSQL.EXE” -U SomeUser的-P somepassword -d NorthwindTest -S(本地)\ SQLEXPRESS -Q “SELECT * FROM用户配置”

谢谢 赛义德

回答

3

如果你是舒服遵循的方法在该职位,那么你可以简单地按照MSBuild的说法操作。例如,创建文件constants.proj(你可以任意命名)和db.targets(也可以将它命名为任何你想要的)。然后将这些将包含类似:

constants.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <sqlToolsFolder>C:\Program Files\Microsoft SQL Server\90\Tools\Binn</sqlToolsFolder> 
    <osqlConnectionString>-E</osqlConnectionString> 
    <initialCatalog>Northwind</initialCatalog> 
    <configConnectionString>data source=(local);Integrated Security=SSPI;Initial Catalog=$(initialCatalog)</configConnectionString> 
    <databasePath>C:\root\development\databases</databasePath> 
    <osqlExe>$(sqlToolsFolder)\osql.exe</osqlExe> 
    </PropertyGroup> 
</Project> 

然后在db.targets你只想构建具有这些属性的命令行,然后使用Exec任务来执行它,就像下列。

db.targets

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="constants.targets"/> 

    <Target Name="CreateDb"> 

    <PropertyGroup> 
     <_Command> ... FILL IN HERE ... </_Command> 
    </PropertyGroup> 

    <Exec Command="$(_Command)" /> 

    </Target> 

</Project> 
3

的MSBuild扩展包中包含的任务(即MSBuild.ExtensionPack.Sql2005MSBuild.ExtensionPack.Sql2008)来操纵SQL数据库和下面的例子:

<!-- Create a database --> 
<MSBuild.ExtensionPack.Sql2005.Database TaskAction="Create" DatabaseItem="ADatabase2" MachineName="MyServer\SQL2005Instance"/> 
<!-- Create the database again, using Force to delete the existing database --> 
<MSBuild.ExtensionPack.Sql2005.Database TaskAction="Create" DatabaseItem="ADatabase2" Force="true" Collation="Latin1_General_CI_AI" MachineName="MyServer\SQL2005Instance"/>