SqlPipe.SendResultsStart(SqlDataRecord) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Помечает начало результирующего набора, отправляемого клиенту, и использует указанную запись для конструирования метаданных, описывающих результирующий набор.
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)
Параметры
- record
- SqlDataRecord
Объект SqlDataRecord, из которого извлекаются метаданные, используемые для описания результирующего набора.
Исключения
Значение параметра record
— null
.
Объект record
не содержит столбцов или не был инициализирован.
После вызова метода SendResultsRow(SqlDataRecord) был вызван метод, отличный от SendResultsEnd() и SendResultsStart(SqlDataRecord).
Примеры
В следующем примере создается новый SqlDataRecord объект и его SqlMetaData. Затем этот пример помечает начало результирующих наборов с помощью SendResultsStart метода , отправляет записи с примерами данных обратно клиенту с помощью SendResultsRow метода и помечает конец результирующих наборов методом SendResultsEnd .
[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
Комментарии
Управляемые хранимые процедуры могут отправлять результирующие наборы клиентам, которые не реализуют SqlDataReader. Этот метод вместе с SendResultsRow и SendResultsEndпозволяет хранимым процедурам отправлять клиенту пользовательские результирующие наборы.
Метод помечает SendResultsStart начало результирующих наборов и использует параметр record для создания метаданных, описывающих результирующий набор. Все последующие строки, отправленные SendResultsRow с помощью метода , должны соответствовать определению метаданных.
Обратите внимание, что после вызова SendResultsStartможно вызывать только SendResultsRow и SendResultsEnd . Любой другой метод в том же экземпляре SqlPipe вызывает исключение InvalidOperationException. SendResultsEnd возвращает SqlPipe исходное состояние, в котором можно вызывать другие методы.
После возврата элемента управления в Transact-SQL из выполнения среды CLR не пытайтесь использовать статическую или локальную переменную, инициализированную в памяти CLR. Например, не храните экземпляр класса в классе процесса, например SQLDataRecord
, который будет использоваться после возврата элемента управления из среды CLR. Одним из исключений SQLMetaData
является класс in process.