伙计租约帮助我,我想我很亲密,但我错过了什么。
我正在重写SQL CLR程序集(存储过程),我的程序集联系另一个资源并获取XML。我想将此XML作为记录集返回,而不是标量值。
从我所看到的,这是如何返回记录集:
SqlContext.Pipe.Send(mySqlDataReader)
发送方法包含3个可能的参数:
public void Send(string message);
public void Send(SqlDataRecord record);
public void Send(SqlDataReader reader);
SqlDataReader 类没有构造函数,SqlCommand.ExecuteReader()如何返回一个?
这是模糊的地方。
答案 0 :(得分:3)
我猜你最好使用SqlDataRecord。您可以看到说明here
它应如下所示:
SqlDataRecord record = new SqlDataRecord(new SqlMetaData[] { new SqlMetaData("Column1", SqlDbType.NVarChar)});
// Set the record fields.
record.SetString(0, youVariableWithXmlData);
// Send the data
SqlContext.Pipe.Send(record);
答案 1 :(得分:0)
首先:程序集不返回任何内容,它们只包含一个或多个可能返回结果集,标量值,返回值的方法。
如果您已经有一个SqlDataReader
(从问题的措辞中不清楚),那么您已经非常接近返回结果集。
SqlDataReader类没有构造函数,SqlCommand.ExecuteReader()如何返回一个?
ExecuteReader
方法如何创建SqlDataReader
并不重要。 重要的是 返回SqlDataReader
。因此,您只需要执行以下操作:
SqlDataReader _Reader = SqlCommand.ExecuteReader();
SqlContext.Pipe.Send(_Reader);
// be sure to call .Dispose() on the SqlDataReader, SqlCommand, and SqlConnection objects,
// if they are not each in their own using() blocks
该方法非常有效,但是在将它们作为结果集行传回之前,它们不允许您拦截SqlDataReader的行。因此,如果您需要在将值发送回调用方之前对其进行操作,请使用SqlContext.Pipe
的以下方法:
SendResultsStart(SqlDataRecord)
SendResultsRow(SqlDataRecord)
SendResultsEnd()