2016-06-30 6 views
0

Вот код для моего компонента пользовательского CDCSplitterМБЗМ CDCSpliter компонент

<CustomComponent Name="CDCSplitter" 
 
        ComponentClassId="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" 
 
        ComponentTypeName="Attunity.SqlServer.CDCSplit.CdcSplitterComponent, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
        ContactInfo="Attunity Ltd.; All Rights Reserved; http://www.attunity.com;" 
 
        UsesDispositions="true" 
 
        Version="2" 
 
        ValidateExternalMetadata="false"> 
 
        <Annotations> 
 
        <Annotation AnnotationType="Description">Directs a stream of net change records into different outputs based on the type of the change (Insert, Delete and Update). This allows specific handling for different types of change records.</Annotation> 
 
        </Annotations> 
 
        <InputPaths> 
 
        <InputPath Identifier="Input" OutputPathName="CDCSource.Output"> 
 
         <InputColumns> 
 
         <InputColumn SourceColumn="__$start_lsn" /> 
 
         <InputColumn SourceColumn="__$operation" /> 
 
         <InputColumn SourceColumn="__$update_mask" /> 
 
         <# foreach (var column in table.Columns) { #> 
 
         <InputColumn SourceColumn="<#=column.Name#>" /> 
 
         <# } #> 
 
         </InputColumns> 
 
        </InputPath> 
 
        </InputPaths> 
 
        <OutputPaths> 
 
        <OutputPath Name="InsertOutput"> 
 
         <Annotations> 
 
         <Annotation AnnotationType="Description">Output type - Insert.</Annotation> 
 
         </Annotations> 
 
         <CustomProperties> 
 
         <CustomProperty Name="OutputType" DataType="Int32" 
 
             TypeConverter="Attunity.SqlServer.CDCSplit.OutputType, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
            >0</CustomProperty> 
 
         </CustomProperties> 
 
         <OutputColumns> 
 
         <OutputColumn Name="__$start_lsn" DataType="Binary" Length="10" /> 
 
         <OutputColumn Name="__$operation" DataType="Int32" /> 
 
         <OutputColumn Name="__$update_mask" DataType="Binary" Length="128" /> 
 
         <# foreach (var column in table.Columns) { #> 
 
         <OutputColumn Name="<#=column.Name#>" DataType="<#=column.DataType#>" Length="<#=column.Length#>" /> 
 
         <# } #> 
 
         </OutputColumns> 
 
         <ExternalColumns /> 
 
        </OutputPath> 
 

 
        <OutputPath Name="UpdateOutput"> 
 
         <Annotations> 
 
         <Annotation AnnotationType="Description">Output type - Update.</Annotation> 
 
         </Annotations> 
 
         <CustomProperties> 
 
         <CustomProperty Name="OutputType" DataType="Int32" 
 
             TypeConverter="Attunity.SqlServer.CDCSplit.OutputType, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
            >1</CustomProperty> 
 
         </CustomProperties> 
 
         <OutputColumns> 
 
         <OutputColumn Name="__$start_lsn" DataType="Binary" Length="10" /> 
 
         <OutputColumn Name="__$operation" DataType="Int32" /> 
 
         <OutputColumn Name="__$update_mask" DataType="Binary" Length="128" /> 
 
         <# foreach (var column in table.Columns) { #> 
 
         <OutputColumn Name="<#=column.Name#>" DataType="<#=column.DataType#>" Length="<#=column.Length#>" /> 
 
         <# } #> 
 
         </OutputColumns> 
 
        </OutputPath> 
 

 
        <OutputPath Name="DeleteOutput"> 
 
         <Annotations> 
 
         <Annotation AnnotationType="Description">Output type - Delete.</Annotation> 
 
         </Annotations> 
 
         <CustomProperties> 
 
         <CustomProperty Name="OutputType" DataType="Int32" 
 
             TypeConverter="Attunity.SqlServer.CDCSplit.OutputType, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
            >2</CustomProperty> 
 
         </CustomProperties> 
 
         <OutputColumns> 
 
         <OutputColumn Name="__$start_lsn" DataType="Binary" Length="10" /> 
 
         <OutputColumn Name="__$operation" DataType="Int32" /> 
 
         <OutputColumn Name="__$update_mask" DataType="Binary" Length="128" /> 
 
         <# foreach (var column in table.Columns) { #> 
 
         <OutputColumn Name="<#=column.Name#>" DataType="<#=column.DataType#>" Length="<#=column.Length#>"/> 
 
         <# } #> 
 
         </OutputColumns> 
 
        </OutputPath> 
 

 
        <OutputPath Name="ErrorOutput" IsErrorOutput="true"> 
 
         <Annotations> 
 
         <Annotation AnnotationType="Description">Output type - Error.</Annotation> 
 
         </Annotations> 
 
         <CustomProperties> 
 
         <CustomProperty Name="OutputType" DataType="Int32" 
 
             TypeConverter="Attunity.SqlServer.CDCSplit.OutputType, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
            >3</CustomProperty> 
 
         </CustomProperties> 
 
         <OutputColumns> 
 
         <OutputColumn Name="__$start_lsn" DataType="Binary" Length="10" /> 
 
         <OutputColumn Name="__$operation" DataType="Int32" /> 
 
         <OutputColumn Name="__$update_mask" DataType="Binary" Length="128" /> 
 
         <# foreach (var column in table.Columns) { #> 
 
         <OutputColumn Name="<#=column.Name#>" DataType="<#=column.DataType#>" Length="<#=column.Length#>" /> 
 
         <# } #> 
 
         </OutputColumns> 
 
         <ExternalColumns /> 
 
        </OutputPath> 
 

 
        </OutputPaths> 
 

 

 
       </CustomComponent>

Этот код BIML компилируется без ошибок, но когда я исполняю пакет Он бросает следующее сообщение об ошибке:

Ошибка: 0xC0047062 при DFT Incremental load_Source1, CDCSplitter [92]: System.ArgumentException: значение не входит в ожидаемый диапазон. на Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSBuffer100.DirectRow (Int32, Int32 адача бросать lOutputID) в Attunity.SqlServer.CDCSplit.CdcSplitterComponent.ProcessInput (Int32 inputId, PipelineBuffer буфер) в Microsoft.SqlServer.Dts.Pipeline. ManagedComponentHost.HostProcessInput (обертка IDTSManagedComponentWrapper100, идентификатор входа Int32, идентификатор IDTSBuffer100 pDTSBuffer, буфер IntPtrWirePacket) Ошибка: 0xC0047022 при DFT Инкрементная load_Source1, SSIS.Pipeline: код ошибки SSIS DTS_E_PROCESSINPUTFAILED. Метод ProcessInput на компоненте «CDCSplitter» (92) не удался с кодом ошибки 0x80070057 при обработке ввода «CDCSource_Output_CDCSplitter» (94). Выбранный компонент возвратил ошибку из метода ProcessInput. Ошибка относится к компоненту, но ошибка является фатальной и приведет к прекращению работы задачи потока данных. До этого могут появляться сообщения об ошибках с дополнительной информацией о сбое.

BIML Эксперты Пожалуйста, дайте предложения по решению этой ошибки

ответ

0

Найдено решение, я делюсь для других, если кто-то столкнется с той же проблемой

Перепишите код выше BIML в

<CustomComponent Name="CDCSplitter" 
 
        ComponentClassId="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" 
 
        ComponentTypeName="Attunity.SqlServer.CDCSplit.CdcSplitterComponent, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
        ContactInfo="Attunity Ltd.; All Rights Reserved; http://www.attunity.com;" 
 
        UsesDispositions="true" 
 
        Version="1" 
 
        ValidateExternalMetadata="false"> 
 
        <Annotations> 
 
        <Annotation AnnotationType="Description">Directs a stream of net change records into different outputs based on the type of the change (Insert, Delete and Update). This allows specific handling for different types of change records.</Annotation> 
 
        </Annotations> 
 
        <InputPaths> 
 
        <InputPath Identifier="Input" OutputPathName="CDCSource.Output" > 
 
         <InputColumns> 
 
         <InputColumn SourceColumn="__$start_lsn" /> 
 
         <InputColumn SourceColumn="__$operation" /> 
 
         <InputColumn SourceColumn="__$update_mask" /> 
 
         <# foreach (var column in table.Columns) { #> 
 
         <InputColumn SourceColumn="<#=column.Name#>" /> 
 
         <# } #> 
 
         </InputColumns> 
 
        </InputPath> 
 
        </InputPaths> 
 
        <OutputPaths> 
 
        <OutputPath Name="InsertOutput" SynchronousInput="Input" ExclusionGroup="1"> 
 
         <Annotations> 
 
         <Annotation AnnotationType="Description">Output type - Insert.</Annotation> 
 
         </Annotations> 
 
         <CustomProperties> 
 
         <CustomProperty Name="OutputType" DataType="Int32" 
 
             TypeConverter="Attunity.SqlServer.CDCSplit.OutputType, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
            >0</CustomProperty> 
 
         </CustomProperties> 
 
         <OutputColumns> 
 
         
 
         </OutputColumns> 
 
         <ExternalColumns /> 
 
        </OutputPath> 
 

 
        <OutputPath Name="UpdateOutput" SynchronousInput="Input" ExclusionGroup="1"> 
 
         <Annotations> 
 
         <Annotation AnnotationType="Description">Output type - Update.</Annotation> 
 
         </Annotations> 
 
         <CustomProperties> 
 
         <CustomProperty Name="OutputType" DataType="Int32" 
 
             TypeConverter="Attunity.SqlServer.CDCSplit.OutputType, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
            >1</CustomProperty> 
 
         </CustomProperties> 
 
         <OutputColumns> 
 
         
 
         </OutputColumns> 
 
        </OutputPath> 
 

 
        <OutputPath Name="DeleteOutput" SynchronousInput="Input" ExclusionGroup="1"> 
 
         <Annotations> 
 
         <Annotation AnnotationType="Description">Output type - Delete.</Annotation> 
 
         </Annotations> 
 
         <CustomProperties> 
 
         <CustomProperty Name="OutputType" DataType="Int32" 
 
             TypeConverter="Attunity.SqlServer.CDCSplit.OutputType, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
            >2</CustomProperty> 
 
         </CustomProperties> 
 
         <OutputColumns> 
 
         
 
         </OutputColumns> 
 
        </OutputPath> 
 

 
        <OutputPath Name="ErrorOutput" IsErrorOutput="true" SynchronousInput="Input" ExclusionGroup="1"> 
 
         <Annotations> 
 
         <Annotation AnnotationType="Description">Output type - Error.</Annotation> 
 
         </Annotations> 
 
         <CustomProperties> 
 
         <CustomProperty Name="OutputType" DataType="Int32" 
 
             TypeConverter="Attunity.SqlServer.CDCSplit.OutputType, Attunity.SqlServer.CDCSplit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aa342389a732e31c" 
 
            >3</CustomProperty> 
 
         </CustomProperties> 
 
         <OutputColumns> 
 
         
 
         </OutputColumns> 
 
         <ExternalColumns /> 
 
        </OutputPath> 
 

 
        </OutputPaths> 
 

 

 
       </CustomComponent>