通常,在SSIS组件内,“String”类型的输入列具有用户定义的长度。
我的Output0Buffer中的示例,我有Column1 DataType = Unicode字符串[DT_WSTR]长度= 15。
在SSIS程序(C#)中,是否可以通过编程方式找到值“15”?我通常使用System.Reflection来获取数据类型,并使用SetValue方法在缓冲区中分配值。
示例:
foreach (PropertyInfo p in props)
{
if (p.GetType() == typeof(string))
{
p.SetValue(Output0Buffer, Convert.ToString(value), null);
}
...
}
但有时,我超过了缓冲区大小,这会引发异常。而不是这个,我希望我能够获得缓冲区长度,所以我可以在将它们分配给缓冲区之前截断它们。
或者,我总是可以采用传统的方式来分配缓冲区的值 即Output0Buffer.Column1 = value.substring(0,15);
但是代码输入太多了:)我宁愿尝试通过Buffer属性循环并相应地填充。
希望你们能帮助我。提前谢谢。
答案 0 :(得分:0)
我相信你正在寻找的东西是这样的:
public override void Input0_ProcessInputRow(Input0Buffer InputBufferRow)
{
//For InputBuffer
foreach (IDTSInputColumn100 iColumn in this.ComponentMetaData.InputCollection[0].InputColumnCollection)
{
string iName = iColumn.Name;
string iType = iColumn.DataType.ToString();
string iLength = iColumn.Length.ToString();
string iPrecision = iColumn.Precision.ToString();
}
//For OutputBuffer
foreach (IDTSOutputColumn100 oColumn in this.ComponentMetaData.OutputCollection[0].OutputColumnCollection)
{
string oName = oColumn.Name;
string oType = oColumn.DataType.ToString();
string oLength = oColumn.Length.ToString();
string oPrecision = oColumn.Precision.ToString();
}
}
这些接口在Microsoft.SqlServer.Dts.Pipeline.Wrapper
命名空间中可用。除了此处列出的内容外,他们还有其他您可能感兴趣的属性。