2011-09-05 77 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

感謝您的輸入,但如果你看我自己的答案,我發現自己幾個月前 –