SSIS自定义组件在VS2008中工作,但在DTExec下失败,可能与LineageID相关

时间:2012-04-13 16:19:15

标签: c# ssis bids

我正在编写一个自定义SSIS组件,在Visual Studio中运行时工作正常;但是,使用dtexec.exe或dtexecui.exe运行时会失败。

当我构建从列名到LineageID的映射时,PreExecute方法失败。这是我感到困惑的地方,因为我在调试器中查看我正在做的事情就是将我从var foo = output.OutputColumnCollection[i].LineageID获得的值传递给bufferManager.FindColumnByLineageID(output.Buffer, foo)

此时我从FindColumnByLineageID说出了一个异常,

  

用户代码Message = Value未处理System.ArgumentException   不在预期范围内。
  Source = Microsoft.SqlServer.DTSPipelineWrap StackTrace:            的InnerException:

我不知所措。代码在BIDS中运行良好,此时的逻辑似乎没问题,确实没有什么可做错的,我只是将SSIS中的值传递回SSIS。我的感觉是有一些设置或配置搞砸了,但我不知道它到底会是什么。任何猜测都会受到最高的评价。

谢谢!

3 个答案:

答案 0 :(得分:0)

您的Visual Studio计算机是64位环境吗?您可能想尝试运行32位版本的DTExec.exe,即Program Files(x86)中的版本。

尝试使用64位版本运行程序包时会出现reasonable number issues

答案 1 :(得分:0)

您是否注册了自定义组件?

自定义SSIS组件(例如自定义任务或自定义转换)不会随部署实用程序一起移动。您必须手动移动和注册组件以使SSIS包能够访问它们。

答案 2 :(得分:0)

我答应在一年多前回答这个问题,对等待感到抱歉。时间的距离使得一些细节逐渐消失,但基本上我遇到了问题,因为在两种环境中组件实际上是不同的。

在BIDS中运行时,组件图中添加了不可见的组件,这些组件在命令行案例中不存在。我怀疑这是为GUI更新提供支持以及为观众和所有人提供附加功能的能力。

我试图变得聪明并从该图中提取一些信息并且因为在BIDS案例中隐藏了额外的组件而变得幸运。 (感觉就像是堆栈中分配了某些东西的错误之一,当它应该在堆上时,你的命运取决于堆栈中的那一点何时会被踩到。)一旦我修复了我正在做的坏假设组件图然后解决了自己。