有大量在线文档显示如何通过以下方式之一读取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中引用的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解决方案。

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

10-12 07:03