ssis中的两个C#源脚本组件导致"对象引用未设置为对象的实例"

时间:2015-01-09 18:29:51

标签: c# ssis dynamics-crm

非常奇怪的错误。我在SSIS中有两个独立工作的源C#脚本。基本上他们会从外部CRM源获取信息。

当它们都在同一个脚本中启用时,在执行的第一个脚本上我得到:

  

对象引用未设置为对象的实例

这有效

http://i.imgur.com/dz6fi2o.png

这不是 - 它冻结在第一个脚本上。

http://i.imgur.com/Kgvi51a.png

我认为它可能是一个缓冲区问题,但在抛出错误之前它仍然会完成第一个脚本。这两个脚本都有唯一的ID和guid。

调试没用,它停止在我编程的任何代码上停止。我很难过。

这是ScriptThree.CreateNewOutputRows() - 需要注意的是,scriptthree是第二个数据流任务的一部分。

    public override void CreateNewOutputRows()
{
    /*
      Add rows by calling the AddRow method on the member variable named "<Output Name>Buffer".
      For example, call MyOutputBuffer.AddRow() if your output was named "MyOutput".
    */

    QueryExpression query = new QueryExpression("email")
    {
        ColumnSet = new ColumnSet(new string[] { "subject", "regardingobjectid", "createdon", "directioncode" }),
        PageInfo = new PagingInfo()
        {
            Count = 250,
            PageNumber = 1,
            ReturnTotalRecordCount = false
        }
    };

    EntityCollection results = null;

    do
    {
        results = organizationservice.RetrieveMultiple(query);

        foreach (Entity record in results.Entities)
        {
            emailBuffer.AddRow();

            emailBuffer.emailid = record.Id;

            if (record.Contains("subject"))
                emailBuffer.subject = record.GetAttributeValue<string>("subject");
            if (record.Contains("regardingobjectid"))
                emailBuffer.regarding = record.GetAttributeValue<EntityReference>("regardingobjectid").Id;
            if (record.Contains("createdon"))
                emailBuffer.createdon = record.GetAttributeValue<DateTime>("createdon");
            if (record.Contains("directioncode"))
                emailBuffer.directioncode = record.GetAttributeValue<bool>("directioncode");

        }
        query.PageInfo.PageNumber++;
        query.PageInfo.PagingCookie = results.PagingCookie;
    }        
    while (results.MoreRecords);
}

2 个答案:

答案 0 :(得分:0)

我仍然不知道具体原因是什么,但我将我的脚本复制并粘贴到一个新的脚本对象中,它突然又开始工作了。

答案 1 :(得分:0)

我想,您复制并粘贴了整个脚本组件,然后在第二个脚本组件中修改了代码,因此您有两个具有相同ComponentScriptId的脚本组件。这就是为什么添加一个新问题解决了这个问题。