在ScriptMain.cs之外的另一个类中使用SSIS变量
本文关键字:SSIS 变量 另一个 cs ScriptMain | 更新日期: 2023-09-27 18:28:23
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’在当前上下文中不存在。"
如果其他类需要访问变量的值,那么正如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();
在其他班级内部。MakeURL(),您可以使用实例变量DtsVariables,就像您在ScriptMain中使用Dts.Variables一样,例如:
public string MakeURL()
{
return DtsVariables["User::URLBase"].Value.ToString() + "/default.aspx";
}