我遇到了一个问题,我试图通过我认为是数据库中的数字列来排序结果集。但是,当我得到结果集时,它已经对列进行了排序,就好像它是一个字符串(所以按字母顺序排列),而不是将其排序为int。在Transact SQL中数字排序(以字符串排序而不是Int排序)
作为一个例子。我有这些数字,
1,2,3,4,5,10,11
当我在处理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 Express版本,和Visual Studio 2005
我已尝试在网路上散布大量的东西。包括使用Convert()和ABS()无效。
任何帮助将不胜感激。
编辑:有人提出了什么,我与他们做后,DataReader的返回他们的问题......
我使用一个排序列表变量“结果”的名义下。
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);
}
}
希望它有帮助。
@OrbMan,纯语义。无论我是否想要使用Asc或Desc,问题仍将存在。 – MindingData 2010-05-06 02:35:48