Share via


SqlPipe.SendResultsStart(SqlDataRecord) Méthode

Définition

Marque le début d'un jeu de résultats à renvoyer au client et utilise le paramètre d'enregistrement pour construire les métadonnées qui décrivent le jeu de résultats.

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)

Paramètres

record
SqlDataRecord

Objet SqlDataRecord à partir duquel les métadonnées sont extraites ; utilisé pour décrire le jeu de résultats.

Exceptions

record a la valeur null.

record n'a pas de colonnes ou n'a pas été initialisé.

Une méthode autre que SendResultsRow(SqlDataRecord) ou SendResultsEnd() a été appelée après la méthode SendResultsStart(SqlDataRecord).

Exemples

L’exemple suivant crée un et SqlDataRecord son SqlMetaData. L’exemple marque ensuite le début d’un jeu de résultats à l’aide de la SendResultsStart méthode , renvoie les enregistrements avec des exemples de données au client à l’aide de la SendResultsRow méthode et marque la fin du jeu de résultats avec la SendResultsEnd méthode .

[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

Remarques

Les procédures stockées managées peuvent envoyer des jeux de résultats aux clients qui n’implémentent pas de SqlDataReader. Cette méthode, ainsi SendResultsRow que et SendResultsEnd, autorisent les procédures stockées à envoyer des jeux de résultats personnalisés au client.

La SendResultsStart méthode marque le début d’un jeu de résultats et utilise le paramètre record pour construire les métadonnées qui décrivent le jeu de résultats. Toutes les lignes suivantes, envoyées à l’aide de la SendResultsRow méthode , doivent correspondre à cette définition de métadonnées.

Notez qu’après avoir appelé SendResultsStart, uniquement SendResultsRow et SendResultsEnd peuvent être appelés. Toute autre méthode dans le même instance de SqlPipe lève un InvalidOperationException. SendResultsEnd rétablit SqlPipe l’état initial où d’autres méthodes peuvent être appelées.

Une fois que le contrôle est retourné à Transact-SQL à partir de l’exécution du CLR, n’essayez pas d’utiliser une variable statique ou locale initialisée dans la mémoire CLR. Par exemple, ne stockez pas de instance d’une classe in process, par exemple SQLDataRecord, qui sera utilisée après les retours de contrôle à partir du CLR. Une exception est la SQLMetaData classe in process.

S’applique à

Voir aussi