2011-09-05 80 views
0

我想做一些SQL的东西(回数据库,恢复数据库,运行一些脚本文件)作为MSBuild脚本的一部分。 MSBuild扩展包中的Sql2008.Database任务似乎是一个简单的方法,但我找不到指定服务器实例或用户名和密码的方法。我发现很难相信它仅限于您正在构建的计算机上的默认实例,并且想要在用户MSBuild正在运行时进行连接,但我找不到其他方法。 This是我工作的文档。任何人都可以解释如何做到这一点,或者我需要看看不同的方法?MSBuild ExtensionPack Sql2008.Database任务

回答

1

我发现MSBuild.ExtensionPack.BaseTask类有属性MachineNameUserNameUserPasswordSQL2008.Database类继承此类。我习惯于MSDN风格的文档,其中继承的成员记录在派生类,所以我不认为在那里寻找他们,虽然我应该有。这对他们来说确实是一个奇怪的地方,但是在从MSBuild.ExtensionPack.BaseTask继承的许多其他类的背景下,它们毫无意义。

+0

你仍然限于默认实例吗? – Burt

+0

不,你只是使用命名实例的正常语法,即设置MachineName参数为机器名/实例 –

0

该任务是否有MachineName成员?认为这只是你需要的sql实例名称。

我使用任务MSBuild.ExtensionPack.SqlServer.SqlExecute和一个sql语句来执行其他任务

<MSBuild.ExtensionPack.SqlServer.SqlExecute TaskAction="ExecuteReader" 
               Sql="RESTORE DATABASE $(DatabaseName) FROM DISK = N'$(RestoreFileDestination)\Source\$(Branch)\Build\$(DatabaseFile)' WITH FILE = 1,MOVE N'Accelerate' TO N'$(dataDir)\$(DatabaseName)_1.LDF', MOVE N'Accelerate_log' TO N'$(logsDir)\$(DatabaseName)_2.LDF', NOUNLOAD, REPLACE, KEEP_CDC, STATS = 10" 
               ConnectionString="Data Source=Localhost\SQLExpress;Initial Catalog=master;Integrated Security=True" 
               CommandTimeout="660"> 

他们从来没有想到我似乎需要的选项....

+0

不,它不具备计算机名。我正在考虑如上使用SqlExecute任务,但如果可能的话,我宁愿使用Sql2008.Database任务,因为备份/恢复选项是任务定义的一部分,而不是SQL命令的一部分。 –

+0

从任务的帮助:<! - 将数据库还原到其他位置 - > ? –

+0

好的,我没有注意到,我正在查看这里定义的Database类的成员http://www.msbuildextensionpack.com/help/4.0.1.0/html/2dfa8205-e7ff-59bb-771b-d107fd8cb0da.htm和MachineName不是其中之一。但是,这对我的问题中指定的用户名和密码不起作用。我需要针对不属于域的远程SQL服务器运行脚本,因此我无法使用集成的Windows身份验证。 –

2

有用户名和的userPassword属性,你可以使用:

<MSBuild.ExtensionPack.Sql2008.Database 
MachineName="$(SQLServer)" 
TaskAction="Backup" 
DatabaseItem="$(SQLDatabaseName)" 
DataFilePath="$(SQLBackupLocation)" 
UserName="$(SQLUserName)" 
UserPassword="$(SQLPassword)" /> 

+0

感谢您的输入,但如果你看我自己的答案,我发现自己几个月前 –