SSIS动态连接字符串

时间:2017-09-25 10:24:21

标签: c# ssis

我试图为我的所有软件包建立与DB的动态连接。我试图通过使用脚本组件加载用户定义的变量来实现这一点。

我知道我也可以使用环境变量来做到这一点,问题是我的所有软件包都不会被安排,其中一些是我用web服务或程序运行的,所以我不能使用预定的工作要做到这一点,使用@reference_id有点难以维护。

我不知道如何循环变量。我试过了

foreach(变量中的变量var)

但那不是那种方式。
所以我在这里有两个问题:

  • 如何循环传递的所有变量?
  • 如何从中获取变量名称? (我没有在Variables.VarName上看到名称属性。?)

E.G。 OLE DB源将返回两行:

conName | conString
 con1   |  someConnection
 con2   |  someConnection

我的项目中有两个用户定义的变量 - > con1和con2。 所以,迭代我的变量 - > foreach(变量),如果var.name = row.conName,则使用row.conString值加载。

1 个答案:

答案 0 :(得分:1)

最后,我设法做到了这一点。对于那些想要做同样事情的人,我就是这样做的:

public class ScriptMain : UserComponent
{

    Dictionary<string, string> AllCons = new Dictionary<string, string>();

    public override void PostExecute()
    {
        base.PostExecute();
        string connectionString;

        foreach (IDTSVariable100 obj in ReadWriteVariables)
        {
            if (AllCons.TryGetValue(obj.QualifiedName, out connectionString))
            {
                obj.Value = connectionString;
            }
        }
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        AllCons.Add("User::" + Row.ConName, Row.ConString);
    }
}

我使用Dictionary对象在Input0_ProcessInputRow部分存储连接名称和连接字符串。然后,在PostExecute中,我使用IDTSVariable100对象迭代了所有用户定义变量。然后检查,如果连接名称等于变量,则将连接字符串放入其中。

希望它有所帮助。