2017-09-05 63 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