c# - 在 ScriptMain.cs 之外的另一个类中使用 SSIS 变量

标签 c# ssis

我在 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();

在 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/

相关文章:

c# - ssis sql 任务记录

c# - 绑定(bind)到 DataContext 的 WPF 样式 DataTrigger 不起作用

c# - 我可以在 C# 中通过我的调制解调器接听电话吗

c# - .Net (C#/VB.NET) 中泛型的使用示例

sql-server - 在2016 SSISDB中查询SSIS配置

configuration - ssis 中不同包配置的优点/缺点是什么

c# - 如何在 curl 中调用 wcf 服务?

c# - 监控网络流中的新数据

sql-server - Azure 和 SSIS 包

sql-server - 为什么 SSIS vb 脚本在 VS 中执行时正确检测到文件存在,而不是从 SQL Server 中执行