2017-02-21 14 views
2

単一の入力列を調べ、各行の値に応じてbool型の出力列を作成する単純なカスタムSSISコンポーネントを作成しようとしています。メソッドが見つかりませんカスタムSSISコンポーネントのSetDataTypeProperties

私は値をとり、それを変換するより簡単なコンポーネントを構築しました。これは、出力列での操作を必要としません。この例では、文字列を取り込んでブール値を出力する必要があり、コンポーネントはブール値を出力することを知る必要があるため、値を条件付き分割に渡すことができます。

出力列を追加しようとしています。

public override DTSValidationStatus Validate() 
{ 
    IDTSOutput100 output = ComponentMetaData.OutputCollection[0]; 

    IDTSOutputColumn100 outputcol = output.OutputColumnCollection.New(); 
    outputcol.Name = "IsValid"; 
    outputcol.SetDataTypeProperties(DataType.DT_BOOL, 0, 0, 0, 0); 

    return DTSValidationStatus.VS_ISVALID; 
} 

そして私はProcessInputのステップの間にそれを移入しようとすると::

public override void ProcessInput(int inputID, PipelineBuffer buffer) 
{ 
    while (buffer.NextRow()) 
    { 
     string str = buffer.GetString(0); 
     buffer.SetBoolean(0, IsValid(str)); // validation code not relevant 
    } 
} 

私はパッケージに、このコンポーネントを使用しようとすると、私はこのエラーを取得するcode samples from Microsoftに基づいて、私はこれを行っています:

The component has detected potential metadata corruption during validation. 
Error at Data Flow Task [Uppercase [24]]: System.MissingMethodException: Method not found: 'Void Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSOutputColumn100.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType, Int32, Int32, Int32, Int32)'. 
    at EmailValidation.Uppercase.Validate() 
    at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostValidate(IDTSManagedComponentWrapper100 wrapper) 

このエラーメッセージを検索しても何も価値がありません。

元のサンプルとオンラインのその他のチュートリアルでは、出力列の追加は、入力列をループし、それぞれに追加の出力を追加することで行われます。私はこれを試して、同じエラーを取得します。

また、出力列コードをValidateからOnInputPathAttachedに移動しようとしましたが、それでも同じエラーが発生します。

私は間違っていますか?

+2

使用しているSSISのバージョンは何ですか? – mallan1121

+0

@ mallan1121見ていただきありがとうございます。それはパイプラインフォルダの120であるSQL 2014です –

+0

あなたのアセンブリに 'Microsoft.SqlServer.Dts.Pipeline.Wrapper'コンポーネントへの参照がありますか?エラーが発生しているコンピュータで使用できますか?エラーは、Microsoft.SqlServer.Dts.Runtime.Wrapperアセンブリでメソッドを見つけることができないというエラーです。 – Ferdipux

答えて

2

これはSQL Server Data Tools for Visual Studio 2015のバグです。Visual Studio 2013のIntegration Servicesパッケージにカスタマイズされた出力列を含むカスタムコンポーネントをビルド、デプロイ、使用しました。ただし、同じ2015年にパッケージにデプロイされたツールは、記述されたエラーを引き起こします。

0

それはまだ関連のケースでは、私は(ComponentMetaDataプロパティではなくSetDataTypeProperties付)同様の問題に遭遇し、私のために働いたソリューションは、falseMicrosoft.SqlServer.DTSPipelineWrapMicrosoft.SQLServer.DTSRuntimeWrap参照のEmbed Interop Typesプロパティを設定しました。

この解決策が見つかりましたhere。これはInvalidCastExceptionを得るための解決策として挙げられていますが、カスタムコンポーネントのDTSPipelineWrapまたはDTSRuntimeWrapアセンブリを参照している場合は常に適切です。

関連する問題