自定义PipelineComponent从SQL 2008R2升级到2012的SSIS包

时间:2015-11-02 12:52:32

标签: sql-server visual-studio-2012 ssis

我已将自定义PipelineComponent从.net 3.5升级到4.0,并将更新的引用从... Server \ 100 \ SDK ...更新为... Server \ 110 \ SDK ... 版本dll已复制到C:\ Program Files \ Microsoft SQL Server \ 110 \ DTS \ PipelineComponents \以及C:\ Program Files(x86)\ Microsoft SQL Server \ 110 \ DTS \ PipelineComponents \并安装在GAC C中:\的Windows \ Microsoft.NET \组件\ GAC_MSIL

我已经为SQL2012安装了完整的SQL Server 2012和Visual Studio Data Tools。

在Visual Studio中编辑SSIS包期间,数据流选项卡上的SSIS工具箱中可以看到包。

在Visual Studio 2008中针对SQL2008R2创建的程序包的Visual Studio 2010/2012中的更新过程中,出现以下错误:

  • 升级包PackageName.dtsx(错误) 消息 错误0xc0047062:DataFlowTaskName:Microsoft.SqlServer.Dts.Pipeline.ComponentUpgradeFailedException:PC FxRate Lookup无法自行升级。[[PerformUpgrade方法失败。]] 在Microsoft.SqlServer.Dts.Pipeline.PipelineComponent.PerformUpgrade(Int32 pipelineVersion) at MyCompanyName.Services.Infrastructure.DataFlow.PCDictionaryLookup`2.PerformUpgrade(Int32 pipelineVersion) 在Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostCheckAndPerformUpgrade(IDTSManagedComponentWrapper100包装器,Int32 lPipelineVersion)

错误0xc004801f:DataFlowTaskName:“PC FxRate Lookup”的组件元数据无法升级到组件的较新版本。 PerformUpgrade方法失败。

错误0xc001f429:程序包升级:程序包PackageName.dtsx的加载失败。

 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Interoperability", "CA1405:ComVisibleTypeBaseTypesShouldBeComVisible"), ComVisible(true)]
[
DtsPipelineComponent(
    CurrentVersion = 6,
    DisplayName = "PC FxRate Lookup",
    Description = "send to Output the corresponding value in a map via key from input for a given ScenarioId or a default value")

]
public class PCFxRateLookup : PCDictionaryLookup<string, double?>



[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Interoperability", "CA1405:ComVisibleTypeBaseTypesShouldBeComVisible"), ComVisible(true)]
[
DtsPipelineComponent(
    ComponentType = ComponentType.Transform,
    DisplayName = "PC Dictionary Lookup",
    Description = "Output the corresponding value in a map via key from input for a given ScenarioId or a default value")
]
public abstract class PCDictionaryLookup<T1, T2> : PipelineComponent
{

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

问题出在自定义SSIS PipelineComponent中。在SSIS数据流中添加新组件没有问题,但升级 - 没有。 我必须从PipelineComponent基类重写PerformUpgrade方法,如下所示:

public override void PerformUpgrade(int pipelineVersion)
{
    DtsPipelineComponentAttribute attribute = (DtsPipelineComponentAttribute)Attribute.GetCustomAttribute(this.GetType(), typeof(DtsPipelineComponentAttribute), false);
    int currentVersion = attribute.CurrentVersion;
    ComponentMetaData.Version = currentVersion;
}

在构建项目之后,将dll放在GAC和正确的SQL文件夹中我必须使用记事本更新* .dtsx包。

1)Version = 2.0.0.0&gt;&gt;版本= 4.0.0.0(自定义SSIS包的.net输入参数)。

2)Version = 3.0.0.0&gt;&gt;版本= 4.0.0.0(自定义SSIS包的新版本)。

之后,只需使用向导更新SSIS解决方案。

就是这样。