2011-10-31 57 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