【问题标题】:Returning table from CLR stored procedure从 CLR 存储过程返回表
【发布时间】:2013-06-21 01:25:49
【问题描述】:

我过去曾使用这样的代码从 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 等价物,或者谁能告诉我如何返回结果集。

【问题讨论】:

    标签: sql-server-2008-r2 odbc clrstoredprocedure


    【解决方案1】:

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

    类似:

        private static void sendResultsetRecords(SqlDataReader dataReader)
        {
            SqlMetaData[] meta = createMetaDataForResultset(dataReader);
    
            SqlContext.Pipe.SendResultsStart(new SqlDataRecord(meta));
            sendEachRecordOfData(dataReader, meta);
            SqlContext.Pipe.SendResultsEnd();
        }
    

    您可以在 tSQLt.ResultsetFilter 方法中找到完整的实现,该方法是 tSQLt database unit testing framework for SQL Server 的一部分。

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

    【讨论】:

    • 我不得不将一些函数更改为 ODBC 类型而不是 SQL Server,但这样做是一种享受。
    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2016-04-08
    相关资源
    最近更新 更多