SqlPipe.SendResultsStart(SqlDataRecord) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
標記要傳送回用戶端之結果集的開頭,並使用這個 record 參數,建構描述結果集的中繼資料。
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
備註
Managed 預存程式可以將結果集傳送至未實作 的 SqlDataReader 用戶端。 這個方法與 SendResultsRow 和 SendResultsEnd 一起允許預存程式將自訂結果集傳送至用戶端。
方法 SendResultsStart 會標記結果集的開頭,並使用記錄參數來建構描述結果集的中繼資料。 使用 SendResultsRow 方法傳送的所有後續資料列都必須符合該元資料定義。
請注意,在呼叫 SendResultsStart 之後,只能 SendResultsRow 呼叫 和 SendResultsEnd 。 相同 實例 SqlPipe 中的任何其他方法都會擲回 InvalidOperationException 。 SendResultsEnd 會設定 SqlPipe 回可以呼叫其他方法的初始狀態。
從 CLR 執行回到 Transact-SQL 之後,請勿嘗試使用初始化為 CLR 記憶體的靜態或區域變數。 例如,請勿將 的實例儲存在進程類別中,例如 SQLDataRecord
,這會在控制項從 CLR 傳回之後使用。 其中一個例外狀況是 SQLMetaData
進程類別中的 。