【问题标题】:Get project level connection managers from C#从 C# 获取项目级连接管理器
【发布时间】:2017-03-09 02:48:31
【问题描述】:

我目前正在使用 C# 控制台应用程序,我想在其中执行某些 SSIS 包,这些包是 SSIS 项目的一部分。

这里的问题是,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.

但是,当我像这样遍历 Connectionspkg 对象时

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

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

【问题讨论】:

  • 您的包级连接管理器是否与您的项目连接管理器同名?
  • 并非所有连接管理器都有唯一的名称。

标签: c# ssis


【解决方案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
}

【讨论】:

  • 尽管我想在包级别执行此操作,只导入项目级别的连接而不是整个 ispac 文件,但我终于意识到这是更顺畅和更清洁的方式,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多