sor*_*ist 5 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();
Run Code Online (Sandbox Code Playgroud)
MSDN文章以编程方式加载和运行本地程序包中讨论了此方法.
对于SQL Server 2012,使用SSIS目录方法,执行SSIS包的新方法似乎是使用Microsoft.SqlServer.Management.IntegrationServices命名空间中的类.令我困惑的是,Microsoft没有为这种处理包执行的新方法提供任何有用的文档.在下面的博客文章提出了以下的方法来做到这一点:
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);
Run Code Online (Sandbox Code Playgroud)
但是,这不会在本地执行,而是在服务器上运行.我的问题是,使用远程SQL Server 2012上的SSIS目录,是否仍然可以在我自己的机器上从该远程服务器本地执行包?
定义“不起作用”。正如我从文档中看到的,您提供的相同代码(适用于 < 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 ....)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3358 次 |
| 最近记录: |