我遇到了一個問題,我試圖通過我認爲是數據庫中的數字列來排序結果集。但是,當我得到結果集時,它已經對列進行了排序,就好像它是一個字符串(所以按字母順序排列),而不是將其排序爲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