无法将“System._COMObject”类型的COM对象强制转换为接口类型

时间:2016-03-08 16:33:24

标签: ssis

我有3个SSIS包。 3个SSIS包中有2个完美地工作,第三个。哪个是第二个的副本,除了更改连接字符串不断引发问题:

Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSObject100'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{D4E5AF42-7999-473C-8082-6EFC676953C4}' failed due to the following error: The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)).

自从我复制软件包以来,它一直在这样做。我已经通过在线指南并运行regsvr32 dts.dll,这说它很成功但没有任何改变。我仍然得到错误,为什么会这样?

SSIS包似乎验证了我的容器,与其他两个相比,它需要很长时间才能完成此操作,然后在验证中失败并抛出上述错误消息。

4 个答案:

答案 0 :(得分:4)

您无法复制软件包,但您还需要更改名称并为此软件包生成新的 GUID (标识COM对象)。有关详细信息,请查看this MSDN文章。

答案 1 :(得分:0)

我希望它可以帮助别人。解决方案对我有用:

  1. 我使用gacutil.exe注册了程序集。我的SSIS项目目标服务器版本是SQL 2012.所以,我使用的是DTSPipelineWrap.dll版本11.0。我在管理员模式下打开"Developer Command Prompt for VS2015",然后输入以下命令:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\gacutil.exe /i "C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.DTSPipelineWrap.dll"
  2. 然后从我的SSIS脚本任务,参考 - >我从位置“C:\ Program Files(x86)\ Microsoft SQL Server \ 120 \ SDK \ Assemblies \ Microsoft.SqlServer.DTSPipelineWrap.dll”中删除了使用该程序集的现有DTSPipelineWrap。然后在References文件夹中,右键单击 - >添加引用 - >浏览从位置"C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.DTSPipelineWrap\v4.0_11.0.0.0__89845dcd8080cc91\Microsoft.SQLServer.DTSPipelineWrap.dll"
  3. 中查找程序集
  4. 单击“确定”。重建代码并执行包。它对我有用。

答案 2 :(得分:0)

如果这可能对某人有所帮助:由于错误的优化查询导致超时问题,导致出现此错误。 SSIS软件包没有任何内在的错误,一旦我在数据库源中解决了这个问题,它就可以正常运行。

答案 3 :(得分:0)

在我的情况下,这是一个验证重载/超时,该程序包包含对数百个表的引用。

打开有问题的数据流强制重新验证并清除错误。