PipelineBuffer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供包含数据行和数据列的内存中数据存储区。
public ref class PipelineBuffer : IDisposable
public class PipelineBuffer : IDisposable
type PipelineBuffer = class
interface IDisposable
Public Class PipelineBuffer
Implements IDisposable
- 继承
-
PipelineBuffer
- 实现
示例
下面的示例演示循环访问 in ProcessInput中的行和列的PipelineBuffer转换组件。
using System;
using Microsoft.SqlServer.Dts;
using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
namespace Microsoft.Samples.SqlServer.Dts
{
[DtsPipelineComponent
(
DisplayName="SampleComponent",
ComponentType=ComponentType.Transform
)]
public class SampleComponent: PipelineComponent
{
public override void ProvideComponentProperties()
{
base.ProvideComponentProperties();
///Name the input and output add by the base class.
ComponentMetaData.InputCollection[0].Name = "SampleInput";
ComponentMetaData.OutputCollection[0].Name = "SampleOutput";
}
public override void ProcessInput(int inputID, PipelineBuffer buffer)
{
IDTSInput100 input = ComponentMetaData.InputCollection.GetObjectByID(inputID);
while (buffer.NextRow())
{
foreach (IDTSInputColumn100 col in input.InputColumnCollection)
{
int colIndex = BufferManager.FindColumnByLineageID(input.Buffer,col.LineageID);
object colData = buffer[colIndex];
//TODO: Do something with the column data.
}
}
}
}
}
以下示例显示了向输出缓冲区 PrimeOutput中添加行的源组件。
using System;
using Microsoft.SqlServer.Dts;
using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
namespace Microsoft.Samples.SqlServer.Dts
{
[DtsPipelineComponent
(
DisplayName="SampleComponent",
ComponentType=ComponentType.SourceComponent
)]
public class SampleComponent: PipelineComponent
{
public override void PrimeOutput(int outputs, int[] outputIDs,PipelineBuffer[] buffers)
{
int rows = 100;
PipelineBuffer buf = buffers[0];
IDTSOutput100 output = ComponentMetaData.OutputCollection[0];
Random rand = new Random();
//Loop rows number of times
for(int r = 0; r < rows; r++)
{
buf.AddRow();
foreach( IDTSOutputColumn100 col in output.OutputColumnCollection)
{
int colIndex = BufferManager.FindColumnByLineageID( output.Buffer, col.LineageID);
// Note, buffer columns containing binary large objects
// can not be set using the following syntax. Instead,
// the AddBlobData and SetBytes methods are used.
buf[colIndex] = rand.Next();
}
}
buf.SetEndOfRowset();
}
}
}
注解
PipelineBuffer这是包含行和列的内存中二维数据存储。 它由数据流任务创建,并在执行期间提供给托管数据流组件。 缓冲区中包含的列基于图形中 IDTSOutputColumnCollection100 组件集合中的列。
具有异步输出的源组件和组件接收连接到下游组件的每个输出对象的缓冲区。 这些缓冲区称为输出缓冲区,不包含行。 接收输出缓冲区的组件将行添加到缓冲区,并在完成后调用 SetEndOfRowset 该方法。 此方法将属性的值 EndOfRowset 设置为 true
在最终缓冲区上。 然后,数据流任务会将该缓冲区提供给图形中的下一个组件。
具有同步输出和目标组件的转换组件在方法中ProcessInput接收PipelineBuffer对象。 PipelineBuffer此方法中接收的缓冲区Input包含上游组件添加到的行。 此缓冲区受到限制,不能用于添加或删除缓冲区中的行。
该 PipelineBuffer 代码是用托管代码编写的,通过封送托管代码和基础 IDTSBuffer100 COM 对象之间的数据,支持托管数据流组件开发人员。
有关 Integration Services 数据类型的完整列表以及要与每种数据类型一起使用的类的PipelineBuffer相应Get
和Set
方法,请参阅数据流中的数据类型。
构造函数
PipelineBuffer(IntPtr, PipelineBufferMode) |
实例化 PipelineBuffer 的新实例。 |
PipelineBuffer(UInt32, UInt32, UInt64, IntPtr*, DTP_BUFFCOL*, Boolean) |
初始化 PipelineBuffer 类的新实例。 |
属性
ColumnCount |
获取 PipelineBuffer 的列数。 |
ColumnInfo |
获取有关列的只读元数据。 |
CurrentRow |
获取 PipelineBuffer 中当前行的索引。 |
EndOfRowset |
获取一个值,该值指示当前 PipelineBuffer 是否为最终缓冲区。 |
Item[Int32] |
当前行中指定列的值 |
Mode |
获取一个值,该值指示 PipelineBuffer 是 IDTSInput100 缓冲区还是 IDTSOutput100 缓冲区。 |
RowCount |
获取 PipelineBuffer 对象中的行数。 |
RowSize |
获取 PipelineBuffer 对象中行的大小。 |
RowStarts |
获取行的起点。 |