Sql server 是否从SQL CLR程序集返回记录集?

Sql server 是否从SQL CLR程序集返回记录集?,sql-server,sql-server-2005,assemblies,clr,sqlclr,Sql Server,Sql Server 2005,Assemblies,Clr,Sqlclr,伙计们,请帮帮我,我想我很接近了,但我错过了一些东西 背景 我正在重写一个SQLCLR程序集(存储过程),我的程序集与另一个资源联系并返回XML。我希望将此XML作为记录集而不是标量值返回 据我所见,以下是如何返回记录集: SqlContext.Pipe.Send(mySqlDataReader) Send方法包含3个可能的参数: public void Send(string message); public void Send(SqlDataRecord record); public v

伙计们,请帮帮我,我想我很接近了,但我错过了一些东西

背景 我正在重写一个SQLCLR程序集(存储过程),我的程序集与另一个资源联系并返回XML。我希望将此XML作为记录集而不是标量值返回

据我所见,以下是如何返回记录集:

SqlContext.Pipe.Send(mySqlDataReader)
Send方法包含3个可能的参数:

public void Send(string message);
public void Send(SqlDataRecord record);
public void Send(SqlDataReader reader);
SqlDataReader类没有构造函数,SqlCommand.ExecuteReader()如何返回构造函数

我认为我需要做什么
  • 创建我自己的类继承自 IDataReader
  • 使此类使用XML,并将其公开为 记录(如数据读取器)
  • 重写SqlDataReader并将其传递给SqlContext.Pipe.Send(mySqlDataReader) ??
这就是它变得模糊的地方


如何将自定义记录集返回SQL Server?我想您最好使用SqlDataRecord。你可以看到一个描述

它应该如下所示:

 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);

第一:程序集不返回任何内容,它们只包含一个或多个可能返回结果集、标量值和返回值的方法

如果您已经有了一个
SqlDataReader
(从问题的措辞来看不清楚),那么您很快就可以返回结果集了

SqlDataReader类没有构造函数,SqlCommand.ExecuteReader()如何返回构造函数

ExecuteReader
方法如何创建
SqlDataReader
并不重要。重要的是它确实返回
SqlDataReader
。因此,您只需执行以下操作:

SqlDataReader\u Reader=SqlCommand.ExecuteReader();
SqlContext.Pipe.Send(_Reader);
//确保对SqlDataReader、SqlCommand和SqlConnection对象调用.Dispose(),
//如果它们不在各自的using()块中
该方法非常有效,但不允许在将SqlDataReader的行作为结果集行传回之前拦截它们。因此,如果需要在将值发送回调用方之前对其进行操作,请使用
SqlContext.Pipe的以下方法:

  • SendResultsStart(SqlDataRecord)
  • SendResultsRow(SqlDataRecord)
  • SendResultsEnd()