2017-03-08 44 views
1

我目前正在使用一个C#控制台应用程序,在那里我想执行某些SSIS包,这是SSIS项目的一部分。从C#获取项目级连接管理器#

这里的问题是SSIS包中的一些连接管理器在项目级和一些在包级别。

控制台应用程式:

Package pkg; 
Application app; 
DTSExecResult pkgResults; 

app = new Application(); 
pkg = app.LoadPackage(pkgLocation, null); 

PrintPackageInfo(pkg); 

pkgResults = pkg.Execute(); 

PrintOutput(pkgResults, pkg); 

错误输出:

The connection <connectionid> is not found. This error is thrown by Connection collection when the specific connection element is not found. 

然而,当i循环在Connectionspkg对象这样

foreach(ConnectionManager con in pkg.Connections) 
{ 
    Console.WriteLine("\t Connection Manager {0}", con.Name); 
    Console.WriteLine("\t Connection String {0}", con.ConnectionString); 
} 

它输出包级连接管理器,但不输出项目级别的连接管理器。

+0

做任何你的包级别的连接管理器共享相同的名称作为项目的呢? –

+0

没有所有连接管理器都有唯一的名称。 – uzr

回答

1

如果您正在使用项目级连接,那么我假设您有ispac文件可用。如果是这样,您可以使用Project类使用OpenProject方法之一打开ispac文件。一旦你打开了项目,你可以访问该项目的ConnectionManagerItems并根据需要遍历它们。

使用文件存储为ispac一个例子:

string ispacFile = @"C:\Temp\ssis_project.ispac"; 
Project prj = Project.OpenProject(ispacFile); 
foreach(ConnectionManagerItem conn in prj.ConnectionManagerItems) 
{ 
    Console.WriteLine(conn.StreamName); 
    // other operations as needed 
} 
+0

尽管我想在包级别上只做导入项目级连接而不是整个ispac文件,但我终于意识到这是更平滑和更清洁的方式,谢谢! – uzr