BimlScript C#代码块读取SSIS项目参数
本文关键字:SSIS 项目 参数 读取 代码 BimlScript | 更新日期: 2023-09-27 17:53:20
有很多在线文档显示了如何通过以下之一读取SSIS项目参数:
- Biml标签
- SSIS C#脚本任务
但我花了六个多小时试图从BimlScript中的C#代码中找到一种方法。当然,我是Biml n00b,所以也许我还没有找到解决方案,因为这太容易了,没有人谈论它。
我的Biml(敏感数据替换为"***"(:
<#@ template language="C#" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.OleDb" #>
<#
string connString = "Data Source=***;Provider=***;Persist Security Info=True;Location=***;uid=***;pwd=" + #>@[$Project::PW]<#;
OleDbConnection db2Conn = new OleDbConnection(connString);
string queryString = "SELECT * FROM SYSIBM.SYSTABLES WHERE DBNAME = '***' WITH UR";
OleDbCommand myCommand = new OleDbCommand(queryString);
myCommand.Connection = db2Conn;
db2Conn.Open();
myCommand.ExecuteReader();
db2Conn.Close();
#>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="DB2Test" />
</Packages>
</Biml>
这给出了错误:
Operator '+' cannot be applied to operands of type 'string' and 'void'
这让我认为字符串串联在获得项目参数之前就已经解析了。
请注意,如果我在连接字符串中硬编码密码,它可以正常工作。
我不完全确定这是可能的,据我所知,C#被转换为Biml,然后Biml被用来创建SSIS包。
在我的项目中,我在Biml中创建整个SSIS项目,并在每次需要进行更改时重新创建整个解决方案。为了便于实现这一点,我创建了一个名为Variables.cs的C#文件,我使用<#@ code file="Variables.cs" #>
在每个Biml文件中引用该文件,该文件包含返回我需要在Biml中引用的DataTables的所有值和函数。
例如:
<# foreach (DataRow row in ConnectionVariables.GetTranConnConfig("Target","").Rows) { #>
<OleDbConnection Name="TranTarget_<#=row["TargetDatabaseName"]#>"
ConnectionString="Data Source=<#=row["TargetServerName"]#>;Initial Catalog=<#=row["TargetDatabaseName"]#>;Integrated Security=SSPI;Provider=<#=ConnectionVariables.GetConfigSQLProvider()#>;"
CreateInProject="true"
>
<Expressions>
<Expression ExternalProperty="ConnectionString"
>@[$Project::TranTarget_<#=row["TargetDatabaseName"]#>_Conn]</Expression>
</Expressions>
</OleDbConnection>
<# } #>
它既使用配置数据库中使用元数据的查询结果,也使用C#中硬编码的项目特定值,例如保存元数据的服务器和数据库、要创建的项目的名称等。通过这样做,我可以在Variables.cs中更改一两件事,并在不同的环境中使用通用Biml解决方案。