【问题标题】:Access Object variable in Script Component in SSIS 2012在 SSIS 2012 中的脚本组件中访问对象变量
【发布时间】:2019-07-24 17:41:49
【问题描述】:

我在 VS 2012 中使用 SSIS,我发现的许多答案似乎都适用于旧版本或新版本。

我已经声明了一个名为 User::Weather_XML 的 ReadWriteVariables (我希望这会显示 - 我的公司政策不允许访问 imgur,所以它看起来有效,但我不知道。)

我看了很多答案: Reading object variable values in SSIS script component source - 这是指 Dts.Variables,它显然在 2012 年不再可用?

所以我的代码有这个,但它不会编译,因为 Dts.Variables 在当前上下文中不存在:

    DataTable dt = new DataTable();
    OleDbDataAdapter oleda = new OleDbDataAdapter();
    oleda.Fill(dt, Dts.Variables("Weather_XML").Value);

如何将数据集放入脚本组件中以便我可以使用它?

我有一个带有 URL 字符串的数据集 - 我想遍历列表并使用每个 URL,获取相应的 XML,然后将其保存回我的对象​​。或将其写入数据库或其他东西。似乎这只是语法,但我无法弄清楚。

This 使用 IDTSVa​​riables100,但随后将其引用到字符串,我有一个完整的对象,其中包含字符串。如果我添加代码

    IDTSVariables100 varCollection = null;
    this.VariableDispenser.LockForRead("User::Weather_XML");

它确实编译了,所以它是进步的。

我的 C# 很弱。明显地。 2012 年需要什么语法才能将 Object 变量转换为我可以在脚本组件中使用的东西?随着,也许一些关于访问对象的特定部分的指导。假设 URL 是对象中的第一个字符串字段,而我目前有 4 行。

另外,我包含以下命名空间,可能比我需要的要多:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Net;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Web.Script.Serialization;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Data.OleDb;

【问题讨论】:

    标签: c# ssis ssis-2012


    【解决方案1】:

    在 SSIS 中,Script TaskScript Component 相似但绝对不相同。

    使用脚本组件Dts.Variables不可用(虽然在脚本任务中可用)。

    下面的 MSDN 文章比较了 Script TaskScript Component,阐明了它们之间的区别:Comparing Script Task and Script Compnent

    该文章的相关信息如下:

    使用变量

    脚本组件使用类型化访问器属性 自动生成的基于类,从组件的 ReadOnlyVariables 和 ReadWriteVariables 属性。例如:

    [Visual Basic]

    Dim myVar as String 
    myVar = Me.Variables.MyStringVariable
    

    [C#]

    string myVar; 
    myVar = this.Variables.MyStringVariable;
    

    在您的情况下,以下语法应该有效:

    var xml = this.Variables.Weather_XML;
    

    以下 TechNet 文章是另一个很好的来源,其中包含在 SSIS 脚本组件中使用变量的示例

    https://social.technet.microsoft.com/wiki/contents/articles/22198.use-ssis-variables-and-parameters-in-a-script-component.aspx

    【讨论】:

    • 解释得很好!
    • 为什么是'var xml'?这是一个对象,但我必须提取一个 URL/字符串。这需要进入 PreExecute 方法吗?即使在那里,我也收到错误“'Variables'不包含'Weather_XML'的定义,并且找不到接受'Variables'类型的第一个参数的扩展方法'Weather_XML'(您是否缺少使用指令或程序集引用?)"
    • 我刚刚创建了一个新的 SSIS 项目,添加了一个带有 Excel 文件作为输入的虚拟 DataFlow 任务,以满足设计器工具的要求,并让它允许我添加一个脚本组件。然后,我添加了一个名为 Weather_XML 的包级别字符串变量(在 GUI 中表示为 User::Weather_XML,然后我编辑了脚本组件,将 Weather_XML 添加为 ReadWriteVariable。然后我选择了“编辑脚本”来获取模板 C# 代码——我可以在模板中的任何方法中引用this.Variables.Weather_XMLPreExecute()PostExecute()CreateNewOutoutRows()
    • 也许我会开始一个新的项目。也许这一次尝试了太多次,结果搞砸了。
    • 一个新项目,只需添加一行,它就会出错。我是否缺少指令或程序集参考?这在 2012 年有效吗?
    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 2014-01-27
    • 2023-03-16
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多