【发布时间】:2014-02-05 20:08:18
【问题描述】:
我的 asp.net 网络表单应用程序中有 6 个下拉列表、2 个文本框和一个按钮的搜索页面。单击按钮后,我需要将过滤后的数据选择到转发器组件。当用户使用 SQL 选择命令在所有下拉列表中选择一些值时,我可以这样做。
SELECT * FROM Profiles WHERE (Sport = @Sport, Region = @Region, Name LIKE @Name,...)
但是当用户留下一些下拉列表或文本框为空时,SQL 命令不会显示任何内容。谁能帮帮我,如何解决这个问题?
编辑: 我修改了查询,但还是不行。
SELECT Profiles.ProfileId,Profiles.ProPicUrl, Profiles.Name, Profiles.Specialization, UsersSports.Rating " + _
"FROM Profiles " + _
"JOIN UsersSports ON Profiles.ProfileId = UsersSports.ProfileId " + _
"WHERE (UsersSports.SportId = CASE WHEN @SportId != '' THEN @Sport ELSE UsersSports.SportId END) AND (Region = CASE WHEN @Region != '' THEN @Region ELSE Region END) AND (Specialization = CASE WHEN @Specialization != '' THEN @Specialization ELSE Specialization END)" + _
"AND (Sex = CASE WHEN @Sex != '' THEN @Sex ELSE Sex END) AND ((@AgeFrom IS NOT NULL AND @AgeTo IS NOT NULL AND Age BETWEEN @AgeFrom AND @AgeTo) OR (@AgeFrom IS NULL AND @AgeTo IS NULL AND Age)) " + _
"AND ((@PractiseFrom IS NOT NULL AND @PractiseTo IS NOT NULL AND Practise BETWEEN @PractiseFrom AND @PractiseTo) OR (@PractiseFrom IS NULL AND @PractiseTo IS NULL AND Practise))" + _
"AND ((@Name IS NOT NULL AND Name LIKE '%@Name%') OR (@Name IS NULL AND Name)) AND ((@City IS NOT NULL AND City LIKE '%@City%') OR (@City IS NULL AND City))" + _
"ORDER BY UsersSports.Rating ASC
【问题讨论】:
-
另外
LIKE应该像'%@Name%'一样使用,否则它就像=一样工作。
标签: c# asp.net sql vb.net filtering