Sql server 是否从SQL CLR程序集返回记录集?
伙计们,请帮帮我,我想我很接近了,但我错过了一些东西 背景 我正在重写一个SQLCLR程序集(存储过程),我的程序集与另一个资源联系并返回XML。我希望将此XML作为记录集而不是标量值返回 据我所见,以下是如何返回记录集: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
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()