SSIS - 在脚本任务中使用对象变量(记录集):仅一次

SSIS - Use a Object variable (Recordset) in Script Task: only one time

我对 Recordset 和 Script Component 有一个奇怪的问题,所以我要解释一下情况。

在我的第一步中,我有一个数据流任务,我从 SQL 中读取一个 table 并将结果存储在记录集目标中,并将此记录集保存在一个变量中。

在我的第二步中,我有一个包含此组件的数据流任务:

在步骤 b 中,我为每一行触发一个事件,并使用脚本任务在 ad EventHandler 中捕获该事件 此脚本任务中出现问题。这是代码:

public void Main()
{
    ...
    string messaggio = GetMessaggio(connection, EventNumber);
    ...
}

private string GetMessaggio(string eventNumber)
{
    using (var adapt = new OleDbDataAdapter())
    using (var dt = new DataTable())
    {
        adapt.Fill(dt, Dts.Variables["User::RS_EventType"].Value);
        return dt.AsEnumerable()
                    .Where(r => r.Field<int>("ev_number").ToString() == eventNumber)
                    .Select(r => r.Field<string>("ev_message"))
                    .FirstOrDefault() ?? "ND";
    }
}

第一次,数据table 加载了正确的记录,但这只是第一次发生。 再次调用方法时,Dts.Variables["User::RS_EventType"].Value 似乎仍然有效,但 adapt.Fill 不填充数据 table.

可能是什么问题?

我找到了阅读这篇文章的解决方案 post:SSIS Script Task - Reading RecordSet object in a loop is failing

现在这是代码:

private string GetMessaggio(string eventNumber)
{
    using (var adapt = new OleDbDataAdapter())
    using (var dt = new DataTable())
    {
        var stm = new ADODB.Stream();
        var rsCopy = new ADODB.Recordset();
        var rs = ((ADODB.Recordset)Dts.Variables["User::RS_EventType"].Value).Clone();

        rs.Save(stm);
        rsCopy.Open(stm);

        adapt.Fill(dt, rsCopy);

        rs.Close();
        stm.Close();
        rsCopy.Close();
        Marshal.ReleaseComObject(stm);
        Marshal.ReleaseComObject(rsCopy);
        Marshal.ReleaseComObject(rs);

        return dt.AsEnumerable()
                    .Where(r => r.Field<int>("ev_number").ToString() == eventNumber)
                    .Select(r => r.Field<string>("ev_message"))
                    .FirstOrDefault() ?? "ND";
    }
}