【问题标题】:SSIS Data Flow Task Error: Object reference not set to an instance of an objectSSIS 数据流任务错误:对象引用未设置为对象的实例
【发布时间】:2018-02-12 15:14:54
【问题描述】:

我正在尝试创建一个包含多个数据流任务的包。这些任务在性质上非常相似,但包含相当重要的差异。

我尝试复制任务,然后更改需要更改的内容。

当我单独运行该任务时,它运行良好,但是当我与包中的所有其他任务一起运行它时,我收到以下错误:

对象引用未设置为对象的实例。 at ScriptMain.Input0_ProcessInputRow(Input0Buffer Row) 在 UserComponent.Input0_ProcessInput(Input0Buffer 缓冲区) 在 UserComponent.ProcessInput(Int32 InputID, String InputName, PipelineBuffer 缓冲区,OutputNameMap OutputMap) 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponent.ProcessInput(Int32 InputID,PipelineBuffer 缓冲区)在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID,PipelineBuffer 缓冲区)

不是最友好的错误消息。

谁能告诉我这是什么以及如何解决它?我假设有一些变量或其他属性被重复,但是哪一个?

请注意,多个数据流任务中的许多列将具有相同的列名。

【问题讨论】:

  • 对象引用未设置为对象的实例意味着您引用的对象为空或无。您的输入是否缺少源或优先级或其他内容?也许它是在您复制任务时被删除的东西。 stackoverflow.com/questions/4660142/…
  • 有什么方法可以找出哪个对象?
  • 是的。在代码的开头放置一个断点并单步执行。此外,.NET 在没有 null 处理的情况下中断

标签: sql-server ssis etl script-component


【解决方案1】:

最后我想通了。原因是二级对象需要显式声明。

我有

public class Level2
{
    public string Somevalue { get; set; }
}
public class RootAttributes
{
    public Level2 lvl2 { get; set; }
    public string Somevalue2 { get; set; }
}

应该是的

public class Level2
{
    public string Somevalue { get; set; }
}
public class RootAttributes
{
    public Level2 lvl2 = new Level2;
    public string Somevalue2 { get; set; }
}

奇怪的是 top 方法在其他几个地方都有效。

【讨论】:

  • 很好地解决了问题。你能把这个标记为答案吗?谢谢。
【解决方案2】:

我的发送邮件任务遇到了这个问题。

当我为我的电子邮件正文使用文件连接时,我必须创建一个新的文件连接,它工作正常。

【讨论】:

  • 如果您将代码复制到 dtsx 包中并且包代码中的 GUID 没有对应的对象引用,则可能会发生这种情况。确保您可以创建 dtsx 包所需的引用。如果没有别的,将它们添加到项目中,并重置您的 GUID 以指向正确的引用。
【解决方案3】:

使用 vs 2012 中的包运行报告来确定哪个 DFT 任务包失败。 使用包的查看代码选项来查看是否所有的 DFT 任务都有正确的输入。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2011-07-09
    • 2012-08-31
    • 2011-11-21
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多