2017-09-05 75 views
1

我正在通過DTUTIL將SSIS包從一個SQL服務器複製到另一個C#程序中。這些軟件包位於MSDB中。用C#獲取SSIS包名稱

string dtutilCmd = "/c DTUTIL /SOURCESERVER " + sourceServer + " /SQL " + myPackage + " /DestServer " + destServer + " /COPY " + myPackage; 

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
startInfo.FileName = "cmd.exe"; 
startInfo.Arguments = dtutilCmd; 
process.StartInfo = startInfo; 
process.Start(); 

dtutilCmd字符串變量都是字符串。問題是當我的用戶輸入軟件包名稱時,他們可能會遇到錯誤的情況。他們可能會編寫MYPACKAGE,因此將其部署爲MYPACKAGE,即使它在源服務器上實際存在爲MyPackage,我仍想保留它。

所以我想以某種方式獲取包名稱,並將其填充到我的dtutilCmd字符串的最後部分。

回答

1

所有你需要做的就是利用Microsoft.Dts.Runtime命名空間的'Application'類。然後使用它建立連接並從MSDB獲取軟件包信息。

這裏是鏈接,給出瞭如何去編程做更多的細節 - Enumerating Available Packages Programmatically

+0

得到這個工作。對於未來的人來說,代碼不會完全工作,需要相當多的調整,但解決方案是合法的。 – coinbird

0

提取您的集成服務目錄來ispac。使用SSDT打開它,並部署到您的新服務器。更容易。

+0

爲什麼我得到這個減號?在使用DTUTIL的服務器之間複製ssis軟件包毫無意義... – plaidDK

+0

我沒有降低你的評價,但我也不知道你的解決方案意味着什麼。使用DTUTIL在服務器之間複製軟件包是我知道如何通過C#程序來完成的唯一方法。我的程序做了很多工作,因此部署一個SSIS包絕對需要在C#程序中完成。沒有開放SSMS或任何一方。 – coinbird