Método não encontrado SetDataTypeProperties no componente SSIS personalizado
Estou tentando criar um componente SSIS simples e personalizado que analisa uma única coluna de entrada e a valida, criando uma coluna de saída do tipo bool, dependendo do valor de cada linha.
Eu construí com sucesso um componente ainda mais simples que pega um valor e o transforma: isso não requer mexer nas colunas de saída. Nesse caso, preciso pegar uma string e gerar um booleano e o componente precisa saber que ele gera um booleano para que eu possa alimentar o valor em uma divisão condicional.
Estou lutando para adicionar as colunas de saída. Baseado emamostras de código da Microsoft, Eu fiz isso:
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;
}
E então tento preenchê-lo durante a etapa 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
}
}
Quando tento usar esse componente no pacote, recebo este erro:
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)
A pesquisa nessa mensagem de erro não resultou em nada de valor.
Na amostra original - e em alguns outros tutoriais online - a adição de colunas de saída é feita percorrendo a coluna de entrada e adicionando uma saída adicional para cada uma. Eu tentei isso e recebo o mesmo erro.
Eu também tentei mover o código da coluna de saída deValidate
paraOnInputPathAttached
que ainda gera o mesmo erro.
O que estou fazendo errado?