c# - 用于读取 SSIS 项目参数的 BimlScript C# 代码块

标签 c# ssis biml

有大量在线文档展示了如何通过以下方式之一读取 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# 文件——我在每个 Biml 文件中使用 <#@ code file="Variables.cs" #> 引用它。其中包含返回我需要在 Biml 中引用的数据表的所有值和函数。

例如:

<# 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 解决方案。

关于c# - 用于读取 SSIS 项目参数的 BimlScript C# 代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38106925/

相关文章:

c# - 在 WP7 中将 List<T> 转换为 ObservableCollection<T>

c# - 将 ushort 转换为字符串

c# - 如何在脚本任务中访问 c​​sv 字段

sql-server - 使用带有临时表的存储过程的 BIML 生成 SSIS 包

c# - 在 C# (.NET 4.6) 中关闭 keep-alive FTP 或 FTPS 连接的最佳方法?

c# - 如何使用 Eyeshot 将区域提取为网格或实体?

sql-server - 表达式变量在运行时发生变化

sql-server - 如何使用 SSIS 导入可变记录长度 CSV 文件?

git - 如何通过BIML对SSIS包进行批量更新?

ssis - 有什么方法可以从 SSIS 包生成 BIML 吗?