У меня проблема, когда я пытаюсь упорядочить результат, установленный тем, что я считаю числовым столбцом в моей базе данных. Однако, когда я получаю набор результатов, он отсортировал столбец, как если бы это была строка (по алфавиту), вместо того, чтобы сортировать его как int.
Например. У меня есть эти номера,
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
ВНИМАНИЕ Неправильная сортировка происходит только тогда, когда я вызываю функцию из 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 и Visual Studio 2005.
Я пробовал множество вещей, которые разбросаны по сети. В том числе с помощью Convert() и ABS() безрезультатно.
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: Кто-то поднял вопрос о том, что я делал с ними после того, как устройство чтения данных вернуло их...
Я использую переменную SortedList под названием «результаты».
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);
}
}
Надеюсь, поможет.