我试图为我的所有软件包建立与DB的动态连接。我试图通过使用脚本组件加载用户定义的变量来实现这一点。
我知道我也可以使用环境变量来做到这一点,问题是我的所有软件包都不会被安排,其中一些是我用web服务或程序运行的,所以我不能使用预定的工作要做到这一点,使用@reference_id有点难以维护。
我不知道如何循环变量。我试过了
foreach(变量中的变量var)
但那不是那种方式。
所以我在这里有两个问题:
E.G。 OLE DB源将返回两行:
conName | conString
con1 | someConnection
con2 | someConnection
我的项目中有两个用户定义的变量 - > con1和con2。 所以,迭代我的变量 - > foreach(变量),如果var.name = row.conName,则使用row.conString值加载。
答案 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
对象迭代了所有用户定义变量。然后检查,如果连接名称等于变量,则将连接字符串放入其中。
希望它有所帮助。