2011-10-31 26 views
1

我試圖在dbcommand.commandtext中通過case語句添加一個order,但是我看到沒有行被返回。我想爲case語句中的顏色分配優先級。這將幫助我避免創建一個新的表來優先考慮,並重寫很多代碼來映射外鍵。任何輸入都會有幫助。在dbCommand.CommandText中按大小寫排序

這裏的語句: -

Protected Sub AddData() 
    Dim cn As OleDbConnection = New OleDbConnection(ConfigurationManager.AppSettings("ConnectionString")) 
    cn.Open() 
    Dim dbCommand As New OleDbCommand 
    dbCommand.Connection = cn 

    dbCommand.CommandText = "SELECT * from tblPosts ORDER BY CASE PriorityLevel WHEN 'Red' then 1 when 'Orange' then 2 ELSE 3 END" 

    Try 
     dbCommand.ExecuteNonQuery() 
     Dim objdatareader As OleDbDataReader = dbCommand.ExecuteReader() 
     While objdatareader.Read() 
      Dim PostID As Integer = CInt(objdatareader("ID")) 
      PopulateImages(PostID, cn) 
      PopulateCategories(PostID, cn) 
      rssFeed.AddItem(objdatareader, ImageList, CategoryList) 
      ImageList.Clear() 
      CategoryList.Clear() 
     End While 

     objdatareader.Close() 
    Catch myerror As OleDbException 
     Dim strErr As String = "There was an error updating the database: " & myerror.Message 
    End 

謝謝

回答

0

,能得到任何異常?由於您有END PriorityLevel,所以出現語法錯誤。在END不會帶來任何語法錯誤後,刪除PriorityLevel

除此之外,您的陳述看起來是正確的。

這工作:

declare @tblPosts table(
    PriorityLevel varchar(10) 
) 

    insert into @tblPosts 
    values('Orange'),('Red'),('Green'),('Orange') 

    SELECT * from @tblPosts ORDER BY 
    CASE PriorityLevel WHEN 'Red' then 1 
        when 'Orange' then 2 
    ELSE 3 END 

這不起作用:

declare @tblPosts table(
    PriorityLevel varchar(10) 
) 

    insert into @tblPosts 
    values('Orange'),('Red'),('Green'),('Orange') 

    SELECT * from @tblPosts ORDER BY CASE 
    PriorityLevel WHEN 'Red' then 1 
       when 'Orange' then 2 
    ELSE 3 END PriorityLevel 
+0

我沒有得到任何語法錯誤。我也嘗試在最後刪除PriorityLevel,但它不返回任何行。我試過用'%Red%'替換='Red'等。沒有工作:( – curious123

+0

@PrathibhaAyyappan:然後你的問題是你沒有任何數據在你的表中,直接選擇沒有'order by'並確認你有數據。 – Icarus

+0

我有我的數據如果沒有這個順序,我會返回Red,Orange等作爲select語句的結果 – curious123