除了ScriptMain.cs之外,在另一个类中使用SSIS Variable

jar*_*red 3 c# ssis

我在SSIS中有一个C#脚本任务,我可以传递一个变量没问题.我在脚本中创建了另一个类,调用otherclass.cs.如何在otherclass.cs中使用变量?

我试着这样做:

_urlBase = Dts.Variables["User::URLBase"].Value.ToString();
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

The name 'Dts' does not exist in the current context
Run Code Online (Sandbox Code Playgroud)

我对C#和类很陌生,所以我可能没有正确地提出这个问题.我甚至可能要问什么?

谢谢.


这是我试图完成的解决方案:

在ScriptMain.cs中创建了这样的新服务:

OtherService ws = new OtherService(Dts.Variables["User::URLBase"].Value.ToString());
Run Code Online (Sandbox Code Playgroud)

在OtherService.cs我有这个:

class OtherService
{
    public OtherService(string urlBase)
    {
        _urlBase = urlBase;
        //do other stuff
    }
    //other methods and stuff
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*lly 7

在BIDS 2008中添加C#脚本任务时,请注意它为您生成的ScriptMain任务中的这一行:

public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Run Code Online (Sandbox Code Playgroud)

这表示ScriptMain是Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase的子类.该基类(VSTARTScriptObjectModelBase)定义类型为Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptObjectModel的成员Dts .这又有一个名为Variables的成员.这是您在ScriptMain中键入"Dts.Variables"时所访问的内容.

您在"otherclass.cs"中定义的类不是VSTARTScriptObjectModelBase的子类,因此不会继承其成员Dts.这就是编译器告诉你"当前上下文中不存在名称'Dts'的原因."

如果otherclass需要访问变量的值,则cfrag建议您在实例化类的成员或调用需要此值的类成员函数时传递此值.如果您需要访问多个变量,请考虑以下内容:

public otherclass(Microsoft.SqlServer.Dts.Runtime.Variables dtsVariables)
{
    DtsVariables = dtsVariables;
    // other stuff
}
private Microsoft.SqlServer.Dts.Runtime.Variables DtsVariables;
Run Code Online (Sandbox Code Playgroud)

现在,otherclass有一个名为DtsVariables的实例成员,其非静态成员可以使用它来访问创建对象时传入的Variables集合.您将实例化它并从ScriptMain调用方法,如下所示:

otherclass oc = new otherclass(Dts.Variables);
string url = oc.MakeURL();
Run Code Online (Sandbox Code Playgroud)

在otherclass.MakeURL()中,您可以像使用ScriptMain中的Dts.Variables一样使用实例变量DtsVariables,例如:

public string MakeURL()
{
    return DtsVariables["User::URLBase"].Value.ToString() + "/default.aspx";
}
Run Code Online (Sandbox Code Playgroud)