Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Dapper странно возвращает множественный набор / 9 сообщений из 9, страница 1 из 1
10.12.2015, 17:17
    #39125158
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
Привет.
Подскажите в чем может быть дело.

Код:

Код: c#
1.
2.
3.
4.
5.
6.
7.
            var sql = @"select id from MySchema.[ElemType] where Upper (Handler) like @handler1
                             select id from MySchema.[ElemType] where Upper (Handler) like @handler2";

            var res = conn.QueryMultiple(sql, new {handler1 = FirstName, handler2 = SecondName});

            var handler1 = res.Read<int>().ToArray();
            var handler2 = res.Read<int>().ToArray();



в итоге handler1 и handler2 имеют одинаковое значение - первого элемента (handler1).
Хотя я смотрю в профайлере, из базы действительно возвращается два набора данных, как и положено.

Я так понимаю, что res.Read почему-то берет только первый набор данных с int, а не по порядку. А я ожидал, что этот метод отработает по принципу энумератора: будет возвращать наборы последовательно. Получается я ошибаюсь.

Подскажите как нужно правильно. Не нашел примера со схожей проблемой на странице Даппера https://github.com/StackExchange/dapper-dot-net.

PS.QueryMultiple точно работает, т.к. если запрашивать разные виды сущностей, то все работает. Т.е. так все ок:
Код: c#
1.
2.
            var handler1 = res.Read<int>().ToArray();
            var myOtherElement = res.Read<OtherType>().ToArray();
...
Рейтинг: 0 / 0
10.12.2015, 17:39
    #39125176
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
Сделайте одним запросом, union all
...
Рейтинг: 0 / 0
10.12.2015, 17:55
    #39125201
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
Winnipuh,

ну можно, да :)
но мне просто интересно все равно. Что я не так делаю. Может не раз еще пригодится.
...
Рейтинг: 0 / 0
10.12.2015, 17:59
    #39125205
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
ProBiotekWinnipuh,

ну можно, да :)
но мне просто интересно все равно. Что я не так делаю. Может не раз еще пригодится.

Видимо они читают один набор. Много наборов в общем случае могут иметь разные наборы полей и т.д.
...
Рейтинг: 0 / 0
10.12.2015, 18:37
    #39125246
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
Winnipuh,

Просто через unionall, я думаю, нельзя расчитывать на порядок строк.
Т.е. ВСЕГДА ли
Код: c#
1.
2.
3.
select name1
union all 
select name2


вернется именно в этом порядке ?

Я бы не рисковал, и поэтому бы делать что-то типа такого:

Код: c#
1.
2.
3.
select 1 as id, Name1 as Name
union all 
select 2, Name2



и затем в программе извлекать данные ориентируясь на заданный ID.

Все это мне кажется чуть сложнее, чем просто послать два набора и последовательно их считать :)
...
Рейтинг: 0 / 0
10.12.2015, 19:15
    #39125280
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
ProBiotekПросто через unionall, я думаю, нельзя расчитывать на порядок строк.
почитай как устроен SQL. Там написано что порядок есть только если он явно задан. т.е. order by

Т.е. ни в одном SQL запросе не надо ожидать какого-то порядка, если явно его не указал. Кури Дейта и теорию РСУБД.
...
Рейтинг: 0 / 0
10.12.2015, 19:37
    #39125299
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
Dima T,

вооот. и я о том же.

Однако - мне кажется это заявление относится в большей степени к Табличным данным.
А вот насчет данных, которые подготовлены искуственно с помощью union all я, все же, думаю порядок скорее всего будет тот, что задан.

Однако я и не хочу рисковать. Об этом я и написал чуть выше. Что предпочел бы, все же, сделать два отдельных запроса - чем делать через union all.
...
Рейтинг: 0 / 0
10.12.2015, 20:14
    #39125324
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
ProBiotekОднако - мне кажется это заявление относится в большей степени к Табличным данным.
А вот насчет данных, которые подготовлены искуственно с помощью union all я, все же, думаю порядок скорее всего будет тот, что задан.
Задан кем? Ты его не задал, поэтому не ожидай что он будет. "скорее всего будет" это ты как понимаешь? Скорее всего я уже уволюсь к тому времени когда сглючит?
ProBiotekОднако я и не хочу рисковать. Об этом я и написал чуть выше. Что предпочел бы, все же, сделать два отдельных запроса - чем делать через union all.
есть
Код: sql
1.
2.
3.
4.
select name1
union all 
select name2
order by ...
...
Рейтинг: 0 / 0
11.12.2015, 10:43
    #39125613
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dapper странно возвращает множественный набор
ProBiotek,
авторПросто через unionall, я думаю, нельзя расчитывать на порядок строк.
Т.е. ВСЕГДА ли
select name1
union all
select name2

вернется именно в этом порядке ?

Это известная тема. Выше коллега уже написал варианты.

Здесь ключевай фраза "в этом порядке", при этом порядок не указан, а только в голове автора.
Нужно указывать порядок.

К тому примеру:

Код: sql
1.
2.
3.
4.
5.
select * from 
(select name1 as 'name', 1 as 'mumu'
union all 
select name2 as 'name', 2 as 'mumu') t
order by mumu
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Dapper странно возвращает множественный набор / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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