我有一个执行SSIS包的.NET应用程序。
最后我有一个脚本变量,它将值X赋给变量,然后包结束。
我需要一种从.NET包中获取该变量值的方法。可以吗?
工作流程为:
.NET app > typical .NET stuff > execute SSIS package > SSIS package has a variable named "chicken" with value = 3 > .NET package continues and to do so it needs "chicken" value.
答案 0 :(得分:0)
假设您已经为SSIS包使用了sql server部署方法。通过以下示例步骤从变量中读取值或设置变量值
将以下程序集导入应用程序
System.Data.SqlTypes;
Microsoft.SqlServer.Dts.Runtime;
Microsoft.SqlServer.Management.Smo;
Microsoft.SqlServer.Management.Smo.Agent;
Microsoft.SqlServer.Management.Common;
System.Data.SqlClient;
添加以下代码段,这些代码段将返回部署在SQL Server上的SSIS包的集合
Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
PackageInfos pInfos = app.GetPackageInfos("\\", ConfigurationSettings.AppSettings["ServerIp"].ToString(), "", "");
注意:ServerIp
受SQL Server IP地址
现在我们将包信息(此处为SSIS包的名称)添加到下拉列表中,以便用户可以选择SSIS包并执行相同的操作。
foreach (PackageInfo pInfo in pInfos)
{
if (pInfo.Name != "Maintenance Plans")
ComboBoxJob.Items.Add(pInfo.Name);
}
以下代码段显示了如何执行包。当用户点击屏幕截图中显示的“执行”按钮时,将调用此代码段。
Microsoft.SqlServer.Dts.Runtime.Application app;
app = new Microsoft.SqlServer.Dts.Runtime.Application();
DTSExecResult pkgResults_Sql;
Package pkgIn = new Package();
pkgIn = app.LoadFromSqlServer("\\"+ComboBoxJob.SelectedItem.ToString().Trim(),ConfigurationSettings.AppSettings["ServerIp"].ToString(), "", "", null);
// This statement set “Test” variable to 12
pkg.Variables["Test"].Value = 12;
//This statement gets activity present at index 2 in SSIS package and
//allows you to modify properties. For example I am disabling activity
//present at index 2. So that when this package will execute activity at
//index 2 won’t be running
TaskHost th=(TaskHost)pkgIn.Executables[2];
th.Disable =true;
pkgResults_Sql = pkgIn.Execute();
//Message box will show either Success/Failure
MessageBox.Show(pkgResults_Sql.ToString());
为了执行整个功能,用户必须拥有MSDB数据库的相应权限。