2012-03-20 92 views
3

我在SSIS中有一个C#脚本任务,我可以将一个变量传递给没有问题。我在脚本中创建了另一个类,调用otherclass.cs。如何在其他class.cs中使用变量?除了ScriptMain.cs之外,在另一个类中使用SSIS变量

我想只是这样做:

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

但我得到这个错误:

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

我很新的C#和类,所以我可能无法正确问这个问题。我甚至可能问什么?

谢谢。


SOLUTION

这里是我的解决方案是什么,我试图做到:

在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 
} 
+1

为什么不把dts变量的值传递给构造函数或方法中的'Otherclass'? – cfrag 2012-03-20 13:36:18

回答

7

当您在2008年出价,请添加一个C#脚本任务,注意到这条线,因为它会为您生成ScriptMain任务:

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

这就是说ScriptMain是Microsoft.SqlServer.Dts.Tasks一个子类。 ScriptTask.VSTARTScriptObjectModelBase。该基类(VSTARTScriptObjectModelBase)定义了一个类型为的成员Dts Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptObjectModel。这又有一个名为变量的成员。这是您在ScriptMain中键入“Dts.Variables”时正在访问的内容。

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

如果其他类需要访问变量的值,则cfrag建议您在实例化类的成员或调用需要此值的类成员函数时可以传递此值。如果你需要访问多个变量,可以考虑这样的事情:

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

现在otherclass有一个实例成员名为DtsVariables其中的非静态成员可以使用它来访问的变量集合是创建对象时传入。你会实例并调用方法从ScriptMain是这样的:

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

内otherclass.MakeURL(),您可以使用实例变量DtsVariables就像你会使用在ScriptMain Dts.Variables,如:

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

感谢Chris的详细解释。我会在今天进行测试。 – jared 2012-03-20 18:23:03

+0

+1:帮助我也是,只是写了代码,还没有测试过它。希望它会工作:) – Divi 2012-04-03 07:47:03

相关问题