Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SQL Server 2012上从SSIS目录执行SSIS包_C#_Ssis_Sql Server 2012 - Fatal编程技术网

C# 在SQL Server 2012上从SSIS目录执行SSIS包

C# 在SQL Server 2012上从SSIS目录执行SSIS包,c#,ssis,sql-server-2012,C#,Ssis,Sql Server 2012,使用SQL Server 2012的新SSIS目录,以前通过C#local从SQL Server执行SSIS包的方法(基本上下载包并在调用方机器上执行)不再有效: Application app = new Application(); Package pkg = app.LoadFromSqlServer("\\FolderRoot", "myserver", null, null, null); pkg.Execute(); MSDN文章中讨论了这种方法 对于SQL Server 2012

使用SQL Server 2012的新SSIS目录,以前通过C#local从SQL Server执行SSIS包的方法(基本上下载包并在调用方机器上执行)不再有效:

Application app = new Application();
Package pkg = app.LoadFromSqlServer("\\FolderRoot", "myserver", null, null, null);
pkg.Execute();
MSDN文章中讨论了这种方法

对于SQL Server 2012,使用SSIS目录方法,执行SSIS包的新方法似乎是使用命名空间中的类。让我很困惑的是,微软并没有提供任何有用的文档来说明这种处理包执行的新方法。建议采用以下方法:

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目录,是否仍然可以从该远程服务器在我自己的计算机上本地执行包?

定义“不工作”。正如我从文档中看到的,您给出的代码(适用于<2012年的代码)应该仍然适用于2012年,它没有标记为已弃用,或者类似的东西

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

C:\ProgramFiles(x86)\Microsoft SQL Server\110\SDK\Assemblys\Microsoft.SqlServer.ManagedTs.dll

//编辑;现在看来你是对的:

也许这会让你走(ps我不知道这是否有效,但我看到了一些有用的方法,也许你可以让它工作):


我从未尝试过以编程方式从SSIDB执行包。但是,SSIDB中的包不仅仅是一个单独的包。这是一个项目的一部分。包必须在项目上下文中执行,而项目上下文只能通过SSIDB执行。没错,包需要在其项目上下文中执行。因此,真正的问题是如何在我的PC上本地执行整个远程部署的项目?使用Microsoft.SqlServer.Dts.Runtime;你尝试过这个名称空间吗..你想在c代码中执行它,对吗?@Govind是的,我想在c代码中执行它。该命名空间不适用于包存储在SSIS目录中的SQL server。您提供的代码在服务器上执行项目。这不是我想要实现的。请尝试使用相同的代码,但将projectBytes另存为yourFIle.ispac,然后尝试执行dtexec/Project yourFIle.ispac/package master.dtsx。如果它确实在本地执行,我会尝试使用APIMONITOR查看它调用的方法。如果这不能在本地执行,我认为SSIS包不能在本地执行,尽管我没有找到任何“证明”或反证明。实际上,您的代码看起来可能就是我需要的。我正在测试这个!这绝对是在本地运行项目。非常感谢你!
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 ....)
}