脚本组件转换行值到变量

时间:2018-04-30 16:58:01

标签: c# ssis runtime-error object-reference script-component

我有一个脚本转换组件,它从OLEDB源获取输入,并且对于每一行,使用基于行值的参数执行存储过程。我在过去的解决方案中使用了这个功能而没有问题,但它现在抛出可怕的“对象引用未设置为对象的实例”。我已经比较了所有的设置(例如框架版本,输入/输出,程序集引用等),我可以考虑在这两个解决方案之间进行检查无济于事。实际设置变量似乎只有一个问题,即我可以实例化一个公共计数器,用计数器输出一个消息(在ProcessInputRow方法中)并增加计数器 - 这将触发与行中的行一样多的消息源表。我也尝试过.ToString()为变量值而没有任何运气。

运行时错误 enter image description here

数据流任务

enter image description here

输入列 enter image description here

连接管理器 enter image description here 脚本

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;


[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
    SqlConnection conn = new SqlConnection();
    IDTSConnectionManager100 connMgr;

    public override void AcquireConnections(object Transaction)
    {
        connMgr = base.Connections.adoAdminsys;
        conn = (SqlConnection)connMgr.AcquireConnection(null);
    }

    public override void PreExecute()
    {
        //base.PreExecute();
    }

    public override void PostExecute()
    {
        //base.PostExecute();
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        string certNbr = Row.certNbr;
        int seqNbr = Row.seqNbr;

        try
        {
            SqlCommand cmd = new SqlCommand("dbo.jbb_test_insert", conn);

            cmd.Parameters.Add(new SqlParameter("@certNbr", certNbr));
            cmd.Parameters.Add(new SqlParameter("@seqNbr", seqNbr));

            cmd.ExecuteNonQuery();

        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
}

同样,如果我在行缓冲区内显示消息,它将触发源中有行的确切时间。我还在Source和Script Component之间启用了Data Viewer,以确保实际传递行。此外,如果我只是尝试在消息中显示变量(certNbr,seqNbr),我将收到错误 - 所以我确信问题与输入行有关。

0 个答案:

没有答案