ie bekomme ich Cursordaten, wenn ich eine gespeicherte Prozedur in npgsql aufruf

Ich habe in @ Materialien gesuc www.npgsql.org, konnte aber keine Lösung für mein Problem finden ...

Tabelle, PostgreSQL

[City], [State]
"Austin", "TX"
"Houston", "TX"
"Los Angeles", "CA"
"San Diego", "CA"
"San Fransisco";"CA"
"St.Louis", "MO"

Function (gespeicherte Prozedur), PostgreSQL

-- Procedure that returns a single result set (cursor) 
   CREATE OR REPLACE FUNCTION show_cities() RETURNS refcursor AS $
    DECLARE
      ref refcursor;
    BEGIN
      OPEN ref FOR SELECT city, state FROM cities;
      RETURN ref;                                 
    END;
    $ LANGUAGE plpgsql;

Code, C #

using (NpgsqlConnection conn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString))
{
    conn.Open();
    using (NpgsqlTransaction tran = conn.BeginTransaction())
    {
        using (var command = new NpgsqlCommand("show_cities", conn))
        {
            command.Transaction = tran;
            command.CommandType = CommandType.StoredProcedure;
            NpgsqlDataReader dr = command.ExecuteReader();

            while (dr.Read())
                str += dr.GetValue(0);

            dr.Close();
        }
        tran.Commit();
    }
}

Dies gibt "unbenanntes Portal 1" zurück und es ist ein Cursor, der abgerufen werden soll, keine Daten. Gibt es eine Möglichkeit, dies in Daten wie @ zu konvertiereAustin, Houston, Los Angeles ... ?

s gibt einige Posts über das Internet, aber ich bin mir nicht sicher, was ich falsch mach

npgsql: ver3.0.3 c #: vs2012

(hinzugefügt) Ich habe festgestellt, dass dies bei npgsql ver3.x geschieht, während es in ver2.x mit meinem Code gut funktioniert. Gibt es eine Änderung in der Verwendung zum Abrufen des Cursors?

(Referenz)http: //www.sqlines.com/postgresql/npgsql_cs_result_set

Antworten auf die Frage(6)

Ihre Antwort auf die Frage