使用NpgsqlDataReader从存储过程中读取结果集

时间:2015-11-11 18:19:47

标签: c# postgresql stored-procedures

我有一个带有存储过程/函数的postgres数据库。我正在http://sqlines.com/postgresql/npgsql_cs_result_sets阅读有关读取结果的教程,但我没有得到“存储过程 - 在C#中使用单个结果集”中所述的相同输出。

我错过了什么?

这是我得到的。 enter image description here

我的存储过程如下所示:

        CREATE OR REPLACE FUNCTION testme() RETURNS refcursor AS $$
            DECLARE
              ref refcursor;
            BEGIN
              OPEN ref FOR SELECT * FROM achdrow LIMIT 100;
              RETURN ref;
            END;
            $$ LANGUAGE plpgsql;

我的代码看起来像这样:

        Npgsql.NpgsqlCommand cmd = new Npgsql.NpgsqlCommand();
        cmd.Connection = new Npgsql.NpgsqlConnection( "ConnectionString" );
        cmd.CommandType = CommandType.StoredProcedure;
        Npgsql.NpgsqlTransaction tran = null;
        Npgsql.NpgsqlDataReader dr;

        try
        {
            cmd.CommandText = "testme";

            cmd.Connection.Open();

            tran = cmd.Connection.BeginTransaction();

            dr = cmd.ExecuteReader();

            string x = "";
            if ( dr.HasRows == true )
            {
                while ( dr.Read() )
                    x = dr[0].ToString();
            }

            dr.Close();
        }
        finally
        {
            tran.Commit();
            cmd.Connection.Close();
        }

1 个答案:

答案 0 :(得分:1)

<未命名的门户网站2>是光标的自动名称,这将帮助您理解和解决问题http://www.sqlines.com/postgresql/how-to/return_result_set_from_stored_procedure