2017-02-21 43 views
2

Я пытаюсь создать простой пользовательский компонент SSIS, который просматривает один входной столбец и проверяет его, создавая выходной столбец типа bool в зависимости от значения каждой строки.Метод не найден SetDataTypeProperties в настраиваемом компоненте SSIS

Я успешно построил еще более простой компонент, который принимает значение и преобразует его: это не требует возиться с выходными столбцами. В этом случае мне нужно взять строку и вывести логическое значение, и компонент должен знать, что он выводит логическое значение, поэтому я могу передать значение в условное разделение.

Я изо всех сил пытаюсь добавить выходные столбцы. На основании code samples from Microsoft, я сделал это:

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 
    } 
} 

Когда я пытаюсь использовать этот компонент в пакете, я получаю эту ошибку :

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 спасибо за просмотр. Это sql 2014, который равен 120 в папке конвейера –

+0

У вас есть ссылка на компонент Microsoft.SqlServer.Dts.Pipeline.Wrapper' в вашей сборке? Доступно ли это на компьютере, где происходит ошибка? Ошибка говорит о том, что он не может найти метод в сборке Microsoft.SqlServer.Dts.Runtime.Wrapper. – Ferdipux

ответ

2

В результате расследования это является ошибкой в ​​SQL Server Data Tools для Visual Studio 2015. Я создал, развернул и использовал пользовательский компонент с настраиваемыми выходными столбцами в пакете служб Integration Services в Visual Studio 2013. Тем не менее, тот же инструмент, развернутый в пакете в 2015 году, вызывает описанную ошибку.

0

В случае она по-прежнему актуальна, я столкнулся с аналогичной проблемой (С ComponentMetaData собственностью, а не SetDataTypeProperties), и раствором, который работал для меня была установкой Embed Interop Types свойства Microsoft.SqlServer.DTSPipelineWrap и Microsoft.SQLServer.DTSRuntimeWrap ссылки на false.

Я нашел это решение here. Он указан как решение для получения InvalidCastException, но оно кажется актуальным, когда вы ссылаетесь на сборки DTSPipelineWrap или DTSRuntimeWrap в пользовательских компонентах.

 Смежные вопросы

  • Нет связанных вопросов^_^