PipelineComponent.IsInputReady(Int32[], Boolean[]) Methode

Definition

Bestimmt, welche der an eine Komponente angefügten Eingaben auf weitere Daten warten und welche Eingaben über ausreichend Daten für die Verarbeitung verfügen und blockiert werden.

public:
 virtual void IsInputReady(cli::array <int> ^ inputIDs, cli::array <bool> ^ % canProcess);
public virtual void IsInputReady (int[] inputIDs, ref bool[] canProcess);
abstract member IsInputReady : int[] * Boolean[] -> unit
override this.IsInputReady : int[] * Boolean[] -> unit
Public Overridable Sub IsInputReady (inputIDs As Integer(), ByRef canProcess As Boolean())

Parameter

inputIDs
Int32[]

Ein Array der IDs der an die Komponente angefügten Eingaben.

canProcess
Boolean[]

Ein Array von booleschen Werten, das angibt, ob jede Eingabe auf weitere Daten (true) wartet oder blockiert (false), übergeben durch Verweis.

Beispiele

Im folgenden Beispiel gibt die Implementierung der IsInputReady-Methode an, dass eine Eingabe auf den Empfang weiterer Daten wartet, wenn die folgenden Voraussetzungen erfüllt sind:

  • Mehr Upstreamdaten sind für die Eingabe verfügbar (!inputEOR).

  • Die Komponente verfügt derzeit nicht über Daten, die für die Eingabe in den Puffern verarbeitet werden können, die die Komponente bereits empfangen hat (inputBuffers[inputIndex].CurrentRow() == null).

Wenn eine Eingabe auf den Empfang weiterer Daten wartet, gibt die Datenflusskomponente dieses an, indem der Wert des Elements im canProcess-Array, das dieser Eingabe entspricht, auf true festgelegt wird.

Wenn die Komponente hingegen weiterhin verfügbare Daten aufweist, die für die Eingabe verarbeitet können, wird im Beispiel die Verarbeitung der Eingabe angehalten. Hierfür wird im Beispiel der Wert des Elements im canProcess-Array, das dieser Eingabe entspricht, auf false festgelegt.

public override void IsInputReady(int[] inputIDs, ref bool[] canProcess)  
{  
    for (int i = 0; i < inputIDs.Length; i++)  
    {  
        int inputIndex = ComponentMetaData.InputCollection.GetObjectIndexByID(inputIDs[i]);  

        canProcess[i] = (inputBuffers[inputIndex].CurrentRow() == null)  
            && !inputEOR[inputIndex];  
    }  
}  

Im vorangehenden Beispiel wird das boolesche inputEOR -Array verwendet, um anzugeben, ob für die jeweiligen Eingaben weitere Upstreamdaten verfügbar sind. EOR im Namen des Arrays steht für "Ende des Rowsets" und bezieht sich auf die EndOfRowset-Eigenschaft von Datenflusspuffern. In einem Teil des Beispiels, der hier nicht enthalten ist, überprüft die ProcessInput-Methode den Wert der EndOfRowset-Eigenschaft für jeden empfangenen Datenpuffer. Wenn ein Wert true angibt, dass für eine Eingabe keine vorgelagerten Daten verfügbar sind, legt das Beispiel den Wert inputEORtrue für diese Eingabe fest. Diese Implementierung der IsInputReady Methode legt den entsprechenden Wert im canProcess Array false für eine Eingabe fest, wenn der Wert inputEOR angibt, dass für die Eingabe keine vorgelagerten Daten verfügbar sind.

Hinweise

Wenn Sie den Wert der Microsoft.SqlServer.Dts.Pipeline.DtsPipelineComponentAttribute.SupportsBackPressure Eigenschaft auf das DtsPipelineComponentAttributeObjekt festlegen, müssen Sie auch eine Implementierung für die IsInputReady Methode true bereitstellen.

Das Datenflussmodul ruft die IsInputReady Methode auf, um zu ermitteln, welche Eingaben auf den Empfang weiterer Daten warten. In Ihrer Implementierung dieser Methode legen Sie den Status der eingaben der einzelnen Komponenten im booleschen canProcess Array fest. (Die Eingaben werden durch ihre ID-Werte im inputIDs Array identifiziert.) Wenn Sie den Wert einer Eingabe true in das canProcess Array festlegen, ruft das Datenflussmodul die Methode der Komponente ProcessInput auf und stellt weitere Daten für die angegebene Eingabe bereit.

Während mehr Upstreamdaten verfügbar sind, muss sich der Wert mindestens einer Eingabe immer true im canProcess Array befinden, oder verarbeitungsstopps.

Weitere Informationen zur Behandlung übermäßiger Speichernutzung, wenn die Eingaben einer benutzerdefinierten Datenflusskomponente Daten mit ungleichmäßigen Raten erzeugen, finden Sie unter Entwickeln von Datenfluss Komponenten mit mehreren Eingaben.

Gilt für: