У меня есть хранимая процедура, которая содержит условие ORDER BY
для возврата моих записей. Когда я выполняю в SQL, я вижу соответствующий порядок.Порядок сортировки SQLDataReader в сравнении с порядком хранимой процедуры
Однако, когда я выполняю с клиента и загружаю его в SqlDataReader
, заказ изменился. Это не ожидаемый результат. Я получаю те же записи, но порядок (или, может быть, столбцы, которые он заказывает) изменился.
Что можно было бы манипулировать этим? Или, что я могу сделать, чтобы применить ORDER BY
на Reader у клиента?
Окончательный ВЫБРАТЬ из СП:
SELECT DISTINCT
TotalMatchCount
,ExampleDescription as Description
,ExampleMatchCount
,ExampleLevenshtein
,Code6 as Code
,Tier1Code
,Tier1Description
,Tier1MatchCount
,Tier1Levenshtein
,Tier2Code
,Tier2Description
,Tier2MatchCount
,Tier2Levenshtein
,Tier3Code
,Tier3Description
,Tier3MatchCount
,Tier3Levenshtein
FROM
@SearchResults
Order by
ExampleMatchCount Desc
,ExampleLevenshtein ASC
,Tier3MatchCount DESC
,Tier3Levenshtein ASC
,Tier2MatchCount DESC
,Tier2Levenshtein ASC
,Tier1MatchCount DESC
,Tier1Levenshtein ASC
Если результат может быть (только дает основные поля описания):
getting hh child ready for school helping hh child with a school project waiting for school bus with hh child etc.
На клиенте, призывающей к SP:
На этом этапе я проверил значения в rdr
, и они уже вышли из строя. Но в моем коде, когда я иду, чтобы загрузить GridView данных я тяну rdr
от своего класса и загрузить значения:
Dim rdr As System.Data.SqlClient.SqlDataReader
rdr = cSearch.SearchRDR
Try
If rdr.HasRows Then
While rdr.Read()
dgvSearch.Rows.Add(rdr("mycolumn").ToString()
. . . . . . . .
Но, как говорится, это уже из того, прежде чем он попал сюда. Результаты, которые я вижу бы подобное:
waiting for school bus with nonhh child dropping off nonhh child at friend's house waiting for school bus with hh child
который не порядок показано выше. Фактически первый элемент из SQL появляется в считывателе примерно в позиции 4 (строка 4). Затем в строке строки появятся следующие позиции SQL.
В конечном счете на клиенте нет изменений. Он просто не использует порядок, указанный на сервере.
Укажите, пожалуйста, код, нужный результат и фактические результаты, которые вы получаете. –
Предложение 'ORDER BY' в хранимой процедуре влияет на порядок, который они считывают с помощью' SqlDataReader'. Если это не работает, это было бы неожиданным поведением, и было бы невозможно диагностировать без рабочего примера кода, который дублирует поведение. –
Считыватель не изменяет порядок записей. Что вы подразумеваете под «окончательным выбором»? Сохраненная процедура может иметь множество выборок, и все они будут переданы читателю. Вы можете получить к ним доступ через 'reader.NextResult'. Таким образом, может быть, вы получаете доступ к неправильному результату, если у вас есть несколько 'selects'? –