У меня проблема с тем, что я пытаюсь упорядочить набор результатов по числовому столбцу в моей базе данных. Однако когда я получаю набор результатов, он сортирует столбец, как если бы он был строкой (в алфавитном порядке), а не сортирует его как целое число.
В качестве примера. У меня есть эти цифры,
1, 2, 3, 4, 5, 10, 11
Когда я делаю заказ в Transact SQL, я получаю обратно:
1, 10, 11, 2, 3, 4, 5
У меня была такая же проблема с Datagridview некоторое время назад, и проблема была в том, что сортировка выполнялась, как если бы это была строка. Я предполагаю, что то же самое происходит здесь.
Мой полный код SQL:
SELECT TOP (12) DATEPART(YEAR, [OrderDate]) AS 'Year', DATEPART(MONTH, [OrderDate]) AS 'Month' , COUNT(OrderRef) AS 'OrderCount'
FROM [Order]
WHERE [Status] LIKE('PaymentReceived') OR [Status] LIKE ('Shipped')
GROUP BY DATEPART(MONTH, [OrderDate]), DATEPART(YEAR, [OrderDate])
ORDER BY DATEPART(YEAR, OrderDate) DESC, DATEPART(MONTH, OrderDate) desc
DO NOTE
Неправильная сортировка происходит только тогда, когда я вызываю функцию из Visual Studio. Как в моем коде это:
using (SqlConnection conn = GetConnection())
{
string query = @"SELECT TOP (12) DATEPART(YEAR, [OrderDate]) AS 'Year', DATEPART(MONTH, [OrderDate]) AS 'Month' , COUNT(OrderRef) AS 'OrderCount'
FROM [Order]
WHERE [Status] LIKE('PaymentReceived') OR [Status] LIKE ('Shipped')
GROUP BY DATEPART(MONTH, [OrderDate]), DATEPART(YEAR, [OrderDate])
ORDER BY DATEPART(YEAR, OrderDate) DESC, DATEPART(MONTH, OrderDate) desc";
SqlCommand command = new SqlCommand(query, conn);
command.CommandType = CommandType.Text;
using (SqlDataReader reader = command.ExecuteReader())
и т.д.. Когда я запускаю оператор на SQL-сервере, проблем нет.
В настоящее время я использую SQL Server 2005 Express Edition и Visual Studio 2005.
Я перепробовал множество вещей, разбросанных по сети. В том числе с использованием Convert () и ABS () безрезультатно.
Любая помощь будет высоко ценится.
РЕДАКТИРОВАТЬ: Кто-то поднял вопрос о том, что я делал с ними после того, как читатель вернул их ...
Я использую переменную SortedList под именем «results».
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
string Date = reader["Year"].ToString() + "/" + reader["Month"].ToString();
string Orders = reader["OrderCount"].ToString();
results.Add(Date, Orders);
}
}
Надеюсь, это поможет.