我正在使用 .NET 从 SSIS 包中提取元数据。
有没有办法从 OLEDB 源(没有用于语句的变量)和它的目的地中提取映射信息?
是的,尽管您必须深入了解IDTSPipeline100和相关接口的杂草才能这样做:
using System;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
namespace CSharpConsoleApp
{
class PackageDemo
{
public void CountColumns(string packagePath, string dataFlowName)
{
Application app = new Application();
Package package = app.LoadPackage(packagePath, null);
TaskHost th = package.Executables[dataFlowName] as TaskHost;
MainPipe mp = th.InnerObject as MainPipe;
foreach (IDTSComponentMetaData100 md in mp.ComponentMetaDataCollection)
{
foreach (IDTSOutput100 output in md.OutputCollection)
{
Console.WriteLine("Component {0} output {1} has {2} columns",
md.Name, output.Name, output.OutputColumnCollection.Count);
foreach (IDTSOutputColumn100 column in output.OutputColumnCollection)
{
Console.WriteLine("\tcolumn {0} ({1}) is of type {2}",
column.ID, column.Name, column.DataType);
}
}
}
}
}
}
请注意,您需要引用Microsoft.SqlServer.ManagedDTS
、Microsoft.SqlServer.DtsPipelineWrap
和Microsoft.SqlServer.DtsRuntimeWrap
DLL 才能编译此代码。