Freigeben über


SqlPipe.SendResultsStart(SqlDataRecord) Methode

Definition

Kennzeichnet den Anfang eines an den Client zurückgesendeten Resultsets und erstellt mit dem Datensatzparameter die Metadaten zur Beschreibung des Resultsets.

public:
 void SendResultsStart(Microsoft::SqlServer::Server::SqlDataRecord ^ record);
public void SendResultsStart (Microsoft.SqlServer.Server.SqlDataRecord record);
member this.SendResultsStart : Microsoft.SqlServer.Server.SqlDataRecord -> unit
Public Sub SendResultsStart (record As SqlDataRecord)

Parameter

record
SqlDataRecord

Ein SqlDataRecord-Objekt, aus dem Metadaten extrahiert werden, mit denen das Resultset beschrieben wird.

Ausnahmen

record ist null.

Der record enthält keine Spalten oder wurde nicht initialisiert.

Eine andere Methode als SendResultsRow(SqlDataRecord) oder SendResultsEnd() wurde nach der SendResultsStart(SqlDataRecord)-Methode aufgerufen.

Beispiele

Im folgenden Beispiel werden ein neues SqlDataRecord und dessen SqlMetaDataerstellt. Das Beispiel markiert dann den Anfang eines Resultsets mithilfe der SendResultsStart -Methode, sendet Datensätze mit Beispieldaten mithilfe der SendResultsRow -Methode zurück an den Client und markiert das Ende des Resultsets mit der SendResultsEnd -Methode.

[Microsoft.SqlServer.Server.SqlProcedure]
public static void StoredProcReturnResultSet()
{
    // Create the record and specify the metadata for the columns.
    SqlDataRecord record = new SqlDataRecord(
        new SqlMetaData("col1", SqlDbType.NVarChar, 100),
        new SqlMetaData("col2", SqlDbType.Int));

    // Mark the begining of the result-set.
    SqlContext.Pipe.SendResultsStart(record);

    // Send 10 rows back to the client.
    for (int i = 0; i < 10; i++)
    {
        // Set values for each column in the row.
        record.SetString(0, "row " + i.ToString());
        record.SetInt32(1, i);

        // Send the row back to the client.
        SqlContext.Pipe.SendResultsRow(record);
    }

    // Mark the end of the result-set.
    SqlContext.Pipe.SendResultsEnd();
}
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub StoredProcReturnResultSet()

    ' Create the record and specify the metadata for the columns.
    Dim record As New SqlDataRecord( _
        New SqlMetaData("col1", SqlDbType.NVarChar, 100), _
        New SqlMetaData("col2", SqlDbType.Int))

    ' Mark the begining of the result-set.
    SqlContext.Pipe.SendResultsStart(record)

    ' Send 10 rows back to the client.
    Dim i As Integer
    For i = 0 To 9

        ' Set values for each column in the row.
        record.SetString(0, "row " & i.ToString())
        record.SetInt32(1, i)

        ' Send the row back to the client.
        SqlContext.Pipe.SendResultsRow(record)
    Next

    ' Mark the end of the result-set.
    SqlContext.Pipe.SendResultsEnd()
End Sub

Hinweise

Verwaltete gespeicherte Prozeduren können Resultsets an Clients senden, die keine implementieren SqlDataReader. Mit dieser Methode und SendResultsRowSendResultsEndkönnen gespeicherte Prozeduren benutzerdefinierte Resultsets an den Client senden.

Die SendResultsStart -Methode markiert den Anfang eines Resultsets und verwendet den record-Parameter, um die Metadaten zu erstellen, die das Resultset beschreiben. Alle nachfolgenden Zeilen, die mit der SendResultsRow -Methode gesendet werden, müssen dieser Metadatendefinition entsprechen.

Beachten Sie, dass nach dem Aufrufen SendResultsStartvon nur SendResultsRow und SendResultsEnd aufgerufen werden kann. Jede andere Methode im gleichen instance von SqlPipe löst eine ausInvalidOperationException. SendResultsEnd wird auf den Anfangszustand zurück, SqlPipe in dem andere Methoden aufgerufen werden können.

Nachdem die Steuerung von der CLR-Ausführung an Transact-SQL zurückgegeben wurde, sollten Sie nicht versuchen, eine statische oder lokale Variable zu verwenden, die im CLR-Arbeitsspeicher initialisiert wurde. Speichern Sie beispielsweise keine instance einer in der Prozessklasse, z. BSQLDataRecord. , die verwendet wird, nachdem das Steuerelement von der CLR zurückgegeben wurde. Eine Ausnahme ist die SQLMetaData in process-Klasse.

Gilt für:

Weitere Informationen