powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Multiple Result Sets in C# при выполнении процедуры
12 сообщений из 12, страница 1 из 1
Multiple Result Sets in C# при выполнении процедуры
    #39508105
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я здесь задал вопрос на стыке, ткскыть c# и PostgreSQL

http://www.sql.ru/forum/1269354/funkciya-vovzrashhaet-neskolko-naborov-dannyh
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508168
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
IMHO с точки зрения архитектуры - баловство это.
Оверхед.
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508205
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ролг Хупин,
IMHO с точки зрения архитектуры - баловство это.
Оверхед.
Microsoft с вами не особенно согласен. Функций, возвращающих несколько набров, в T-SQL нет, а вот ХП - вполне есть. В т.ч. куча системных - sys.sp_help, sys.sp_helplogings, итд итп.
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508209
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Вы не поверите, для меня авторитет мнения фопумных профи и собственный опыт.
К тому же вы назвали системные внутреннего api. А я о прикдадном коде.
Внутри базы инкапсулировав, пожалуйств. А наружу в клиента плюсов мало.
Вот, в базе и наследование есть. Это не значит все кинулись его использовать.
Imho.
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508293
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Сон Веры Павловны,
Вы не поверите, для меня авторитет мнения фопумных профи и собственный опыт.
К тому же вы назвали системные внутреннего api. А я о прикдадном коде.
Внутри базы инкапсулировав, пожалуйств. А наружу в клиента плюсов мало.
Вот, в базе и наследование есть. Это не значит все кинулись его использовать.
Imho.

Много или мало плюсов - это скорее эмоции.
Собственно, если такая воможность есть она была использована в SQL Server процедурах, вот я и спросил - пытаться переносить такую же логику в постгрескл или развести на несколько процедур.
Есть .NET приложение, работающее с SQLServer, надо его перевести на работу с PostgreSQL.

Да, вот тут почитал, с примерами - вроде всё гладко, но попытался повторить 1=1 и функцию, код - фигушки, не работает, т.е. не вынимает даже первый рекордсет, а только при чтении первого читает имена куросрных наборов данных, но вглубь не идетсами данные не читает.

http://www.sqlines.com/postgresql/npgsql_cs_result_sets
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508341
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Версия npgsql?
Версия Postgres?
Версия .NET Framework / Core?
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508364
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttРолг Хупин,

Версия npgsql?
Версия Postgres?
Версия .NET Framework / Core?

3.1.5.0
PostgreSQL 9.5.1, compiled by Visual C++ build 1800, 64-bit
.NET Framework 4.5
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508375
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И даже так упростил - сделал один курсор

Функция:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
 CREATE OR REPLACE FUNCTION show_users() RETURNS refcursor AS $$
    DECLARE
      ref refcursor;                                   
    BEGIN
      OPEN ref FOR SELECT u_id,u_name FROM usernames;
      RETURN ref;                                      
    END;
    $$ LANGUAGE plpgsql;



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
                NpgsqlConnection conn = new NpgsqlConnection(GetConnectionString());
                conn.Open();
                NpgsqlTransaction tran = conn.BeginTransaction();
                NpgsqlCommand command = new NpgsqlCommand("show_users", conn);
                command.CommandType = CommandType.StoredProcedure;
                NpgsqlDataReader dr = command.ExecuteReader();
                while (dr.Read())
                {
                    Console.Write("{0}\n", dr[0]); /// 
                }
               // Вывод: одна запись
               //<unnamed portal 1>
               // но данных по бзерам из выборки в функции нет

                if (dr.NextResult()) 
                {
                    Console.WriteLine(@"NextResult");
                    while (dr.Read())
                    Console.Write("{0}\t{1} \n", dr[0], dr[1]);
                }
                else
                {
                    Console.WriteLine(@"NO NextResult");
                }
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508378
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И на вызове tran.Commit(); в конце

x = {Npgsql.NpgsqlOperationInProgressException: A command is already in progress: show_users_2
at Npgsql.NpgsqlConnector.StartUserAction(ConnectorState newState, NpgsqlCommand command)
at Npgsql.NpgsqlTransaction.<Commit>d__17.MoveNext()
--- End of sta...
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508398
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Попробуй обнови npgsql до 3.2.5
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508402
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttРолг Хупин,

Попробуй обнови npgsql до 3.2.5

Уже, 3.2.5.0 - та же фигня.

Мне один девелопер насоветовал добавить типа

You then should to execute
Код: plsql
1.
fetch all from "<unnamed portal 1>" 


to get first result set and fetch all from "<unnamed portal 2>" to get second result set accordingly (substitute names by values

Но я так и не понял -куда всунуться с этой командой в моем примере, если она реально нужна.
...
Рейтинг: 0 / 0
Multiple Result Sets in C# при выполнении процедуры
    #39508424
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так получилось прочитать два курсора
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
  try
            {
                NpgsqlConnection conn = new NpgsqlConnection(GetConnectionString());
                conn.Open();
                NpgsqlTransaction tran = conn.BeginTransaction();

                NpgsqlCommand command = new NpgsqlCommand("show_users_2", conn);
                command.CommandType = CommandType.StoredProcedure;
                command.ExecuteNonQuery();

                command.CommandText = "fetch all in \"<unnamed portal 1>\"";
                command.CommandType = CommandType.Text;

                using (var dr = command.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        // do what you want with data, convert this to json or...
                        Console.WriteLine(@"1) {0}:{1}", dr[0], dr[1]);
                    }
                    //dr.Close();
                }
                command.CommandText = "fetch all in \"<unnamed portal 2>\"";
                command.CommandType = CommandType.Text;

                using (var dr = command.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        // do what you want with data, convert this to json or...
                        Console.WriteLine(@"2) {0}:{1}", dr[0], dr[1]);
                    }
                    //dr.Close();
                }

                tran.Commit();
                conn.Close();
            }
            catch (Exception x)
            {
                Console.WriteLine(x);
            }
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Multiple Result Sets in C# при выполнении процедуры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]