📄 customcomponent.cs
字号:
using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
namespace SSISComponent
{
[
DtsPipelineComponent(DisplayName = "Map Month", ComponentType = ComponentType.Transform)
]
public class MapMonthComponent : PipelineComponent
{
private int inputColumnBufferIndex = -1;
private int outputColumnBufferIndex = -1;
private string[] monthNames = new string[12]{"Jan", "Feb", "Mar", "Apr", "May", "June", "July",
"Aug", "Sept", "Oct", "Nov", "Dec"};
public override void ProvideComponentProperties()
{
// Set the name
ComponentMetaData.Name = "Map Month";
// Support one input
ComponentMetaData.InputCollection.RemoveAll();
IDTSInput90 input = ComponentMetaData.InputCollection.New();
input.Name = "MapMonthInput";
// Support one output
ComponentMetaData.OutputCollection.RemoveAll();
IDTSOutput90 output = ComponentMetaData.OutputCollection.New();
output.Name = "MapMonthOutput";
output.SynchronousInputID = input.ID;
// Add an output column
IDTSOutputColumn90 outputColumn = output.OutputColumnCollection.New();
outputColumn.Name = "Month";
outputColumn.SetDataTypeProperties(DataType.DT_WSTR, 7, 0, 0, 0);
}
public override DTSValidationStatus Validate()
{
DTSValidationStatus validationStatus = base.Validate();
if (validationStatus != DTSValidationStatus.VS_ISVALID)
{
return validationStatus;
}
// Check the number of input
IDTSInputCollection90 inputCollection = ComponentMetaData.InputCollection;
if (inputCollection.Count != 1)
{
bool cancel = false;
ComponentMetaData.FireError(-1, ComponentMetaData.IdentificationString, "One input is supported.", "", 0, out cancel);
return DTSValidationStatus.VS_ISBROKEN;
}
// Check the number of input columns
IDTSInputColumnCollection90 inputColumnCollection = ComponentMetaData.InputCollection[0].InputColumnCollection;
if (inputColumnCollection.Count != 1)
{
bool cancel = false;
ComponentMetaData.FireError(-2, ComponentMetaData.IdentificationString, "One input column is supported.", "", 0, out cancel);
return DTSValidationStatus.VS_ISBROKEN;
}
// Check the data type of the input column.
if (inputColumnCollection[0].DataType != DataType.DT_I4)
{
bool cancel = false;
ComponentMetaData.FireError(-3, ComponentMetaData.IdentificationString, "The input column is not of data type DT_I4", "", 0, out cancel);
return DTSValidationStatus.VS_ISBROKEN;
}
return DTSValidationStatus.VS_ISVALID;
}
public override void PreExecute()
{
// Get the buffer column index for the input column
IDTSInput90 input = ComponentMetaData.InputCollection[0];
IDTSInputColumn90 inputColumn = input.InputColumnCollection[0];
inputColumnBufferIndex = BufferManager.FindColumnByLineageID(input.Buffer, inputColumn.LineageID);
// Get the buffer column index for the output column
IDTSOutputColumn90 outputColumn = ComponentMetaData.OutputCollection[0].OutputColumnCollection[0];
outputColumnBufferIndex = BufferManager.FindColumnByLineageID(input.Buffer, outputColumn.LineageID);
}
public override void ProcessInput(int inputID, PipelineBuffer buffer)
{
if (!buffer.EndOfRowset)
{
while (buffer.NextRow())
{
// Get the month in the input column
int month = buffer.GetInt32(inputColumnBufferIndex);
// Transform the month and put it in the output column
if (month < 1 || month > 12)
{
buffer.SetString(outputColumnBufferIndex, "Invalid");
}
else
{
buffer.SetString(outputColumnBufferIndex, monthNames[month - 1]);
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -