0

我过去曾使用这样的代码从 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 中。

是否有 SqlContext 的 Odbc 等效项,或者任何人都可以告诉我如何返回结果集。

4

1 回答 1

0

据我所知,发送并非源自上下文连接的结果的唯一方法是构建一个新的结果集元数据对象,然后一次向上发送一个行。

就像是:

    private static void sendResultsetRecords(SqlDataReader dataReader)
    {
        SqlMetaData[] meta = createMetaDataForResultset(dataReader);

        SqlContext.Pipe.SendResultsStart(new SqlDataRecord(meta));
        sendEachRecordOfData(dataReader, meta);
        SqlContext.Pipe.SendResultsEnd();
    }

您可以在 tSQLt.ResultsetFilter 方法中找到完整的实现,该方法是SQL Server 的 tSQLt 数据库单元测试框架的一部分。

相关代码从该文件的第 56 行开始:http: //sourceforge.net/p/tsqlt/code/HEAD/tree/tSQLtCLR/tSQLtCLR/ResultSetFilter.cs#l56

于 2013-06-24T14:03:30.997 回答