c#-SSIS脚本组件作为源抛出System.NullReferenceException

我有一个DataFlow,其中有一个脚本组件作为源.

我已经根据需要定义了Output(OutputRows)和Column(MyOutputValue).

当我想测试我的脚本时,即使使用硬编码值,也总是会遇到相同的错误:

System.NullReferenceException:对象引用未设置为对象的实例.在ScriptMain.CreateNewOutputRows()中.

我不知道这里出了什么问题.任何想法?

这是我的代码:

using System;
using System.Data;
using System.Windows.Forms;
using System.Threading;
using System.Globalization;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using Microsoft.SqlServer.Dts.Runtime;
using Excel = Microsoft.Office.Interop.Excel;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
#region Members
    String MyOutputValue;
#endregion

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


    MyOutputValue = "test";

    CreateNewOutputRows();

}

public override void PostExecute()
{

base.PostExecute();
}

public override void CreateNewOutputRows()
{
    OutputRowsBuffer.AddRow();

    OutputRowsBuffer.MyOutputValue = MyOutputValue;
}
}

在我的SSIS程序包中,我开始调试,然后得到以下屏幕(它是德语,因此针对该帖子,我将错误翻译为英语):

解决方法:

在PreExecute方法返回之前,SSIS运行时不会初始化输出缓冲区(例如OutputRowsBuffer对象).

不幸的是,您的PreExecute方法直接调用CreateNewOutputRows,这将导致NullReferenceException.相反,您应该让SSIS运行时调用CreateNewOutputRows(它将在执行周期的适当时间调用它):

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

    MyOutputValue = "test";

    // Do NOT call CreateNewOutputRows from PreExecute!
    // CreateNewOutputRows(); 
}

public override void CreateNewOutputRows()
{
    OutputRowsBuffer.AddRow();
    OutputRowsBuffer.MyOutputValue = MyOutputValue;
}

有关其他示例代码,请参见MSDN上的Creating a Source with the Script Component页.

上一篇:汇编 字符串统计 大写 小写 数字 其他


下一篇:解决不*就能连上discord,或者discord一直处于更新无法进入客户端程序