PostgreSQL:函数 returns 多个记录集:如何在 C# 中读取?
PostgreSQL: function returns multiple recordsets: how to read in c#?
使用这个link
http://www.sqlines.com/postgresql/npgsql_cs_result_sets
我已经创建了示例,但它不起作用:
有我的功能:
CREATE OR REPLACE FUNCTION show_cities_multiple()
RETURNS SETOF refcursor AS $$
DECLARE
ref1 refcursor;
ref2 refcursor;
BEGIN
OPEN ref1 FOR SELECT user_id, user_name FROM users;
RETURN NEXT ref1;
OPEN ref2 FOR SELECT id, company FROM customers;
RETURN NEXT ref2;
END;
$$ LANGUAGE plpgsql;
第一个循环仅读取记录集名称,这就是我可以从函数中读取的全部内容。
NpgsqlConnection conn = new NpgsqlConnection(GetConnectionString());
conn.Open();
NpgsqlTransaction tran = conn.BeginTransaction();
NpgsqlCommand command = new NpgsqlCommand("show_cities_multiple", conn);
command.CommandType = CommandType.StoredProcedure;
NpgsqlDataReader dr = command.ExecuteReader();
while (dr.Read())
{
Console.Write("{0}\n", dr[0]);
}
// ----------there is output - only names of cursors recordsets
// <unnamed portal 1>
// <unnamed portal 2>
dr.NextResult();
// But there is nothing to read, no additional recordsets
while (dr.Read())
Console.Write("{0}\t{1} \n", dr[0], dr[1]);
tran.Commit();
conn.Close();
怎么了?如何从 PGSQL 函数读取多个记录集?
有几种方法可以针对不同版本使用游标
使用这个link http://www.sqlines.com/postgresql/npgsql_cs_result_sets 我已经创建了示例,但它不起作用: 有我的功能:
CREATE OR REPLACE FUNCTION show_cities_multiple()
RETURNS SETOF refcursor AS $$
DECLARE
ref1 refcursor;
ref2 refcursor;
BEGIN
OPEN ref1 FOR SELECT user_id, user_name FROM users;
RETURN NEXT ref1;
OPEN ref2 FOR SELECT id, company FROM customers;
RETURN NEXT ref2;
END;
$$ LANGUAGE plpgsql;
第一个循环仅读取记录集名称,这就是我可以从函数中读取的全部内容。
NpgsqlConnection conn = new NpgsqlConnection(GetConnectionString());
conn.Open();
NpgsqlTransaction tran = conn.BeginTransaction();
NpgsqlCommand command = new NpgsqlCommand("show_cities_multiple", conn);
command.CommandType = CommandType.StoredProcedure;
NpgsqlDataReader dr = command.ExecuteReader();
while (dr.Read())
{
Console.Write("{0}\n", dr[0]);
}
// ----------there is output - only names of cursors recordsets
// <unnamed portal 1>
// <unnamed portal 2>
dr.NextResult();
// But there is nothing to read, no additional recordsets
while (dr.Read())
Console.Write("{0}\t{1} \n", dr[0], dr[1]);
tran.Commit();
conn.Close();
怎么了?如何从 PGSQL 函数读取多个记录集?
有几种方法可以针对不同版本使用游标