我过去曾使用过这样的代码来从CLR存储过程返回数据:
SqlCommand command = new SqlCommand("select * from accounts", connection)
SqlDataReader r = command.ExecuteReader();
SqlContext.Pipe.Send(r);
我现在必须使用ODBC来访问Sybase ASE数据库(因此,我将使用带有OdbcConnection的OdbcCommand而不是使用SqlCommand)。我可以使用OdbcDataReader来获取结果集,但是这不能被提供给SqlContext.Pipe。
是否存在Odbc等效的SqlContext,或者是否有人可以告诉我如何返回结果集。
答案 0 :(得分:0)
据我所知,发送不是来自上下文连接的结果的唯一方法是构建一个新的结果集元数据对象,然后一次向上发送一行。
类似的东西:
private static void sendResultsetRecords(SqlDataReader dataReader)
{
SqlMetaData[] meta = createMetaDataForResultset(dataReader);
SqlContext.Pipe.SendResultsStart(new SqlDataRecord(meta));
sendEachRecordOfData(dataReader, meta);
SqlContext.Pipe.SendResultsEnd();
}
您可以在tSQLt database unit testing framework for SQL Server的tSQLt.ResultsetFilter方法中找到完整的实现。
相关代码从此文件的第56行开始:http://sourceforge.net/p/tsqlt/code/HEAD/tree/tSQLtCLR/tSQLtCLR/ResultSetFilter.cs#l56