从c#传递SSIS参数
本文关键字:参数 SSIS 传递 | 更新日期: 2023-09-27 18:06:14
我有一个SSIS包,其中有一些项目。参数设置。
如何通过c#将这些参数的值传递给SSIS包?
我正在尝试以下内容:
const string pkgLocation = @"export.dtsx";
var app = new Application();
var pkg = app.LoadPackage(pkgLocation, null);
var results = pkg.Execute();
返回一个错误,错误集合包含"变量"$Project::connString在变量集合中找不到"。变量可能不存在于正确的作用域中。"
所以我试着添加
var param = pkg.Parameters.Add("connString", TypeCode.String);
param.Value = "test";
var results = pkg.Execute();
但是这会抛出DtsGenericException
我想我明白了。技巧是将ispac文件反序列化(VS构建此文件,但您可以通过msbuild完成)为Project
对象。Project对象允许我们设置项目级参数(以及访问项目级连接管理器)。
从那里,我们需要获得我们想要的特定包的引用,但它将是PackageItem
。PackageItems不能运行,但它们确实有一个Package属性,我们将使用它来实例化Package
类,有一个Execute
方法
public static void final()
{
string isPacPath = @"C:'sandbox'so_31812951'so_31812951'bin'Development'so_31812951.ispac";
string packageName = "Package.dtsx";
Application app = new Application();
Package pkg = null;
// https://msdn.microsoft.com/en-us/library/ff930196(v=sql.110).aspx
Project proj = null;
PackageItem pi = null;
DTSExecResult results;
///////////////////////////////////////////////////////////////////
// Run an SSIS package that has a Project parameter
///////////////////////////////////////////////////////////////////
proj = Project.OpenProject(isPacPath);
// Yes, I can see the packages in there
foreach (var item in proj.PackageItems)
{
Console.WriteLine(string.Format("Project {0} contains package {1}", proj.Name, item.StreamName));
}
//Also able to see the project level parameters
foreach (Parameter item in proj.Parameters)
{
Console.WriteLine(string.Format("Project {0} contains parameter {1} type of {2} current value {3}", proj.Name, item.Name, item.DataType, item.Value));
}
// assign a value to my project level parameter
proj.Parameters["ProjectParameter"].Value = 10;
// Get the package from the project collection
pi = proj.PackageItems[packageName];
// Convert the package into a package object
pkg = pi.Package;
// This is how we specify a package parameter value
pkg.Parameters["PackageParam"].Value = 777;
results = pkg.Execute();
Console.WriteLine(results);
}
这假设您有一个名为so_31812951
的SSIS项目,该项目已编译为位于C:'sandbox'so_31812951'so_31812951'bin'Development'so_31812951的ispac。这个项目只有一个名为package .dtsx的包。将有一个项目级参数Int32,命名为ProjectParameter
,以及一个包级参数Int32,命名为PackageParam
我相信您将需要使用ParameterValue类。
var parameters = new ParameterValue[somelength];
parameters[index] = new ParameterValue()
{
Name = "parameter name",
Value = "parameter value"
}
报表服务将有一个方法:
SetExecutionParmeters(parameters, language).
我假设您正在加载报告,"导出"。