|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.09.2012, 20:06 | #1 |
Пользователь
Регистрация: 01.06.2011
Сообщений: 53
|
DataTable некорректно загружает набор данных из DataReader
Добрый день
Имеется некоторый запрос Код:
Если проходить по этому запросу datareader'ом, то все три строки считываются нормально. Если этот запрос загружать в таблицу через DataTable.Load(datareaderName) и проходить потом по нему через Код:
Чтобы не ломать сортировку, убрал order by из запроса и перенёс её непосредственно в выборку из таблицы, вот так: Код:
То есть если запрос из базы возвращает такие 3 строки: Код:
Даже если после Load(datareader) проверить количество загруженных строк, то есть посмотреть dt.Rows.Count - числа будут отличаться. Как можно побороть эту особенность DataTable, то есть загружать именно то, что возвращает DataReader, не производя сортировок и удалений повторов? |
02.09.2012, 00:04 | #2 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Да нет никаких особенностй у DataTable, надо просто прочитать справку и понять что к чему.
|
02.09.2012, 09:28 | #3 |
Пользователь
Регистрация: 01.06.2011
Сообщений: 53
|
MSDN по datatable читал - там ничего подобного и нет, никаких нюансов не отмечено о том, что идёт автоматическая сортировка или distinct
|
02.09.2012, 10:56 | #4 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Так я и говорю, что нет. Вы просто неправильно что-то делаете, а что-то это то что селект делаете а зачем, почему?
Цитата:
|
|
02.09.2012, 13:00 | #5 |
Пользователь
Регистрация: 01.06.2011
Сообщений: 53
|
Селект - для того, чтобы по всем рядам пройтись и сделать то, что нужно, или есть какой-то другой вариант все ряды обойти? Я пока только этот нашёл.
А другие запросы - если я делаю сложный запрос к базе по нескольким таблицам с 2-3 сортировками, то в итоге при загрузке в datatable сортируется всё по первому столбцу. |
02.09.2012, 13:04 | #6 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Вариантов много
foreach (var row in dt.Rows) foreach (var row in dt.DefaultView) ... |
02.09.2012, 15:50 | #7 |
Пользователь
Регистрация: 01.06.2011
Сообщений: 53
|
Ну да - можно и так, но меня больше интересует вариант, когда селектом на клиенте выполняется необходимая именно для данного случая сортировка.
И в целом до селекта дело даже не доходит - выше я писал, что если сразу после dt.Load(datareader) проверить количество рядов, загруженных из базы - их окажется не 3, как должно быть в данном случае, а 1 ряд, и получается, что неважно - как потом я по рядам буду проходить, если ряд всего 1. |
02.09.2012, 16:00 | #8 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Цитата:
|
|
02.09.2012, 17:25 | #9 |
Пользователь
Регистрация: 01.06.2011
Сообщений: 53
|
Так я и говорю - из базы в данном случае идёт 3 строки, то есть если вместо работы с dt пробегаться по результату, используя while (dataReader1.Read()) - то будет именно 3 строки, а если применять dt, то в dt попадает только одна строка.
Вкратце об исходных таблицах: одна из таблиц - с заказами, вторая - справочник исполнителей, которые эти заказы могут выполнить, и в результате запроса будут те самые 3 строки, где меняется только потенциальный исполнитель. Впоследствии тем сотрудникам, которые подпадают под этот запрос, уходят уведомления - и они уже дальше разбираются, но выходит так, что datatable воспринимает уникальные записи из таблицы заказов как одну строку, не обращая внимания на исполнителя (хотя в этой строке сама колонка исполнителя будет). Первоначальный запрос полнее выглядит так: Код:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DataTable и DataGridView | Дупло | Помощь студентам | 0 | 19.11.2011 20:15 |
Набор данных и загрузка другой таблицы | Turbine | БД в Delphi | 1 | 21.03.2011 14:26 |
Получить набор данных из MS SQL по параметрам в ячейках | Stilet | Microsoft Office Excel | 5 | 13.10.2010 18:26 |
тормозит DataTable | billidean | Общие вопросы .NET | 0 | 24.08.2008 13:10 |