Я пытаюсь создать простой пользовательский компонент 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
, который по-прежнему дает ту же ошибку.
Что я делаю неправильно?
Какую версию SSIS вы используете? – mallan1121
@ mallan1121 спасибо за просмотр. Это sql 2014, который равен 120 в папке конвейера –
У вас есть ссылка на компонент Microsoft.SqlServer.Dts.Pipeline.Wrapper' в вашей сборке? Доступно ли это на компьютере, где происходит ошибка? Ошибка говорит о том, что он не может найти метод в сборке Microsoft.SqlServer.Dts.Runtime.Wrapper. – Ferdipux