SqlPipe.SendResultsStart(SqlDataRecord) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Marca el inicio de un conjunto de resultados que se va a devolver al cliente y utiliza el parámetro de registro para generar los metadatos que describen el 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
Objeto SqlDataRecord del que se extraen los metadatos que se utilizan para describir el conjunto de resultados.
Excepciones
El valor de record
es null
.
record
no tiene columnas o no se ha inicializado.
Se ha invocado un método distinto de SendResultsRow(SqlDataRecord) o SendResultsEnd() después del método SendResultsStart(SqlDataRecord).
Ejemplos
En el ejemplo siguiente se crea un nuevo SqlDataRecord objeto y su SqlMetaData. A continuación, el ejemplo marca el principio de un conjunto de resultados mediante el SendResultsStart método , envía registros con datos de ejemplo al cliente mediante el SendResultsRow método y marca el final del conjunto de resultados con el 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
Comentarios
Los procedimientos almacenados administrados pueden enviar conjuntos de resultados a los clientes que no implementan un SqlDataReader. Este método, junto con SendResultsRow y SendResultsEnd, permiten que los procedimientos almacenados envíen conjuntos de resultados personalizados al cliente.
El SendResultsStart método marca el principio de un conjunto de resultados y usa el parámetro record para construir los metadatos que describen el conjunto de resultados. Todas las filas posteriores, enviadas mediante el SendResultsRow método , deben coincidir con esa definición de metadatos.
Tenga en cuenta que después de llamar a SendResultsStart, solo SendResultsRow se puede llamar a y SendResultsEnd . Cualquier otro método de la misma instancia de SqlPipe produce una InvalidOperationExceptionexcepción . SendResultsEnd vuelve SqlPipe al estado inicial donde se puede llamar a otros métodos.
Después de que el control vuelva a Transact-SQL desde la ejecución de CLR, no intente usar una variable estática o local inicializada en la memoria CLR. Por ejemplo, no almacene una instancia de en una clase de proceso, por ejemplo SQLDataRecord
, que se usará después de que el control devuelva de CLR. Una excepción es la SQLMetaData
clase en proceso.