Oracle DataReader сортируется даже с предложением ORDER BY в VB.NET - PullRequest
0 голосов
/ 03 марта 2020

У меня есть простой запрос SELECT:

SELECT id, name FROM myTable ORDER BY id

Когда я выполняю его в Oracle, я сначала получаю отсортированные буквы.

ID         NAME

A          ValueA                                       
B          ValueB                                       
C          ValueC                                       
1          Value1                                       
2          Value2                                       
3          Value3                                      

Когда я выполняю его в моем Проект VB, устройство чтения данных сортирует его в соответствии с моим CultureInfo, даже с ORDER BY

Dim dictio As New Dictionary(Of String, String)
strQuery = "SELECT id, name FROM myTable ORDER BY id"
rs = New OracleCommand(strQuery, myConnection).ExecuteReader()
Do While (rs.Read())
   dictio.Add(rs.Item(0), rs.Item(1))
Loop

. Я получаю строки в словаре, упорядоченные так:

ID         NAME

1          Value1                                       
2          Value2                                       
3          Value3
A          ValueA                                       
B          ValueB                                       
C          ValueC                        

Я думаю, эта проблема возникла из самого. NET, сортируя строки, когда они помещают их в список, и используя мое CultureInfo.

Вы знаете, как избавиться от него и сказать ему использовать необработанные данные?

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Спасибо за ваши ответы.

Я не очень хочу сортировать данные в моем приложении. На самом деле это приложение перенесено с ASP (VB6) на ASP. NET (VB. NET), и существует множество таких устройств чтения данных. Поэтому я прыгаю, чтобы найти решение, разрешающее все случаи за один раз.

Я попробовал запрос, который вы мне дали, и он мне очень помог. Теперь я совершенно уверен, что моя проблема проистекает из этого.

Вот результаты:

  • В самом Oracle: FRENCH
  • В VB с культурой, установленной в en-US: ДВОЙНОЙ
  • В VB с культурой, установленной на fr-FR: ФРАНЦУЗСКИЙ

Моя мечта - сохранить мою основную культуру США (в основном для дат в приложении) и выполнение моего запроса, как если бы это был запрос fr-FR.

Знаете ли вы, могу ли я каким-то образом выполнить запрос с указанной культурой? Я не мог найти простое решение, чтобы сделать это ...

0 голосов
/ 03 марта 2020

Независимо от фактических технических особенностей вашего запроса и того, почему данные поступают в разных порядках в зависимости от маршрута, по которому вы выполняете запрос, сортировка данных, как правило, входит в компетенцию внешнего интерфейса / стратегии визуализации, а не базы данных

Вытащите ваши данные из БД в любом порядке, в котором они находятся, без ORDER BY, а затем отсортируйте их в своем VB в любом порядке, который вы хотите показать пользователю:

Dim dictio As New SortedDictionary(Of String, String)
                  ^^^^^^
                sort by key


strQuery = "SELECT id, name FROM myTable"
rs = New OracleCommand(strQuery, myConnection).ExecuteReader()
Do While (rs.Read())
   Dim id as String = rs.Item(0).ToString()
   id = Char.IsDigit(id(0)).ToString()(0) + id
   dictio.Add(, rs.Item(1))
Loop

Вместо того, чтобы делать здесь свой собственный компаратор, я выбрал дешевый и неприятный способ изменения ключа, используемого для сортировки; все буквы будут возвращать False из Char.IsDi git, а добавление идентификатора с F будет означать, что они сортируются перед T, который добавляется к цифрам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...