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

我试图做到这一点:

_urlBase = Dts.Variables["User::URLBase"].Value.ToString();


但是我得到这个错误:

The name 'Dts' does not exist in the current context


我是C#和类的新手,所以我可能没有正确地问这个问题。我要问的甚至可能吗?

谢谢。





这是我要完成的工作的解决方案:

在ScriptMain.cs中创建如下新服务:

OtherService ws = new OtherService(Dts.Variables["User::URLBase"].Value.ToString());


在OtherService.cs中,我有以下内容:

class OtherService
{
    public OtherService(string urlBase)
    {
        _urlBase = urlBase;
        //do other stuff
    }
    //other methods and stuff
}

最佳答案

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

public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase


这表示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;


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

otherclass oc = new otherclass(Dts.Variables);
string url = oc.MakeURL();


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

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

关于c# - 在ScriptMain.cs以外的其他类中使用SSIS变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9779715/

10-10 03:10