2017-03-08 45 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