从SQL Server 2012上的SSIS目录执行SSIS包

时间:2014-07-21 12:51:15

标签: c# ssis sql-server-2012

使用SQL Server 2012的新SSIS目录,以前通过C#本地从SQL Server执行SSIS包的方式(它基本上下载包并在调用者计算机上执行它)不会更长的工作:

Application app = new Application();
Package pkg = app.LoadFromSqlServer("\\FolderRoot", "myserver", null, null, null);
pkg.Execute();

MSDN文章Loading and Running a Local Package Programmatically中讨论了这种方法。

对于SQL Server 2012,使用SSIS目录方法,执行SSIS包的新方法似乎是使用Microsoft.SqlServer.Management.IntegrationServices命名空间中的类。令我困惑的是,Microsoft没有为这种处理包执行的新方法提供任何有用的文档。 following blog post建议采用以下方式:

SqlConnection ssisConnection = new SqlConnection(@"Data Source=.\SQL2012;Initial Catalog=master;Integrated Security=SSPI;");
IntegrationServices ssisServer = new IntegrationServices(ssisConnection);
PackageInfo ssisPackage = ssisServer.Catalogs["SSISDB"].Folders["MasterChild"].Projects["MasterChildPackages"].Packages["master.dtsx"];
long executionIdentifier = ssisPackage.Execute(false, null, executionParameter);

但是,这不会在本地执行,而是在服务器上运行。我的问题是,使用远程SQL Server 2012上的SSIS目录,是否仍然可以在我自己的机器上从该远程服务器本地执行包?

1 个答案:

答案 0 :(得分:2)

定义"不起作用" 。正如我从文档中看到的那样,您提供的相同代码(适用于< 2012的代码)应该仍然适用于2012,它没有被标记为已弃用,或者类似的任何内容。

请确保您引用此dll,而不是旧的:

C:\ Program Files(x86)\ Microsoft SQL Server \ 110 \ SDK \ Assemblies \ Microsoft.SqlServer.ManagedDTS.dll

//编辑;看来你现在确实是对的:http://technet.microsoft.com/en-us/library/ms141708.aspx

也许这会让你前进(ps我不知道这是否会奏效,但我看到了一些有用的方法,也许你可以让它运转起来):

var projectBytes = ssisServer.Catalogs["SSISDB"]
                             .Folders["MasterChild"]
                             .Projects["MasterChildPackages"].GetProjectBytes();

// note that projectBytes is basically __URFILE__.ispac      
using (var existingProject = Project.OpenProject(new MemoryStream(projectBytes)))
{
    existingProject.PackageItems["master.dtsx"].Package.Execute(.... todo ....)
}