SqlPipe.SendResultsStart(SqlDataRecord) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
标记要发送到客户端的结果集的开始,并使用记录参数构造描述结果集的元数据。
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。 然后,该示例使用 方法标记结果集的开头,使用 SendResultsStartSendResultsRow 方法将包含示例数据的记录发送回客户端,并使用 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 。 同一InvalidOperationException实例SqlPipe中的任何其他方法将引发 。 SendResultsEnd 设置 SqlPipe 回可以调用其他方法的初始状态。
控制从 CLR 执行返回到 Transact-SQL 后,请勿尝试使用初始化为 CLR 内存的静态或局部变量。 例如,不要将 的实例存储在进程类中,例如 SQLDataRecord
,在从 CLR 返回控件后,将使用该实例。 一个例外是 SQLMetaData
in 进程类。