Compartilhar via


SqlPipe.SendResultsStart(SqlDataRecord) Método

Definição

Marca o início de um conjunto de resultados a ser enviado de volta para o cliente e usa o parâmetro de registro para criar os metadados que descrevem o conjunto de resultados.

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)

Parâmetros

record
SqlDataRecord

Um objeto SqlDataRecord do qual os metadados são extraídos e usados para descrever o conjunto de resultados.

Exceções

O record é null.

O record não tem colunas ou não foi inicializado.

Exemplos

O exemplo a seguir cria um novo SqlDataRecord e seu SqlMetaData. Em seguida, o exemplo marca o início de um conjunto de resultados usando o SendResultsStart método , envia registros com dados de exemplo de volta para o cliente usando o SendResultsRow método e marca o final do conjunto de resultados com o SendResultsEnd método .

[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

Comentários

Os procedimentos armazenados gerenciados podem enviar conjuntos de resultados para clientes que não estão implementando um SqlDataReader. Esse método, juntamente com SendResultsRow e SendResultsEnd, permitem que os procedimentos armazenados enviem conjuntos de resultados personalizados para o cliente.

O SendResultsStart método marca o início de um conjunto de resultados e usa o parâmetro de registro para construir os metadados que descrevem o conjunto de resultados. Todas as linhas subsequentes, enviadas usando o SendResultsRow método , devem corresponder a essa definição de metadados.

Observe que, depois de chamar SendResultsStart, somente SendResultsRow e SendResultsEnd podem ser chamados. Qualquer outro método na mesma instância de SqlPipe lança um InvalidOperationException. SendResultsEnd define SqlPipe de volta para o estado inicial em que outros métodos podem ser chamados.

Depois que o controle retornar ao Transact-SQL da execução do CLR, não tente usar uma variável estática ou local inicializada na memória CLR. Por exemplo, não armazene uma instância de uma classe em processo, por exemplo SQLDataRecord, , que será usada após o retorno do controle do CLR. Uma exceção é a SQLMetaData classe em processo.

Aplica-se a

Confira também