【问题标题】:Filtering SQL Query using predefined filters使用预定义过滤器过滤 SQL 查询
【发布时间】:2015-05-03 21:31:18
【问题描述】:

我在下面粘贴了我的代码。我想做的是使用当天过滤一组数据。 “day”字段存储为缩写的日期名称,因此“thu”表示星期四等。这非常有效,除非您将日期过滤器更改为其他内容,当天的选项不起作用。

例如,今天是星期日。当页面加载时,它会过滤掉所有不属于星期日的列表,因为它应该。在一小群LinkButton 控件上,如果您单击一周中的任何其他日期,它将再次更改并显示所选日期的选项,就像它应该做的那样。但是,当您再次尝试将过滤器设置为星期日,或单击“今天”按钮时,它不会改变。

根据我的代码,任何人都可以看出问题所在吗?如果有任何帮助,我的数据在远程 SQL 服务器上。

VB 代码:

Dim DateVal As Date = DateTime.UtcNow()
Dim DateName As String = DateVal.ToString("ddd")

Protected Sub btnMon_Click(sender As Object, e As EventArgs) Handles btnMon.Click
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = "Mon"
End Sub

Protected Sub btnTue_Click(sender As Object, e As EventArgs) Handles btnTue.Click
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = "Tue"
End Sub

Protected Sub btnWed_Click(sender As Object, e As EventArgs) Handles btnWed.Click
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = "Wed"
End Sub

Protected Sub btnThu_Click(sender As Object, e As EventArgs) Handles btnThu.Click
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = "Thu"
End Sub

Protected Sub btnFri_Click(sender As Object, e As EventArgs) Handles btnFri.Click
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = "Fri"
End Sub

Protected Sub btnSat_Click(sender As Object, e As EventArgs) Handles btnSat.Click
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = "Sat"
End Sub

Protected Sub btnSun_Click(sender As Object, e As EventArgs) Handles btnSun.Click
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = "Sun"
End Sub

Protected Sub btnAll_Click(sender As Object, e As EventArgs) Handles btnToday.Click
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = DateName
End Sub

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    SqlDataSource1.SelectParameters("FiltDay").DefaultValue = DateName
End Sub

TSQL(如果有帮助)

SELECT        Schedule.SlotID, RIGHT('00' + CONVERT(VARCHAR(2), Schedule.StartHr), 2) + ':' + RIGHT('00' + CONVERT(VARCHAR(2), Schedule.StartMin), 2) AS StartTime, 
                     Schedule.ProgrammeID, Schedule.Day, RIGHT('00' + CONVERT(VARCHAR(2), Schedule.EndHr), 2) + ':' + RIGHT('00' + CONVERT(VARCHAR(2), Schedule.EndMin), 2) 
                     AS EndTime, Programmes.ProgrammeName, Programmes.Description, Programmes.PresenterID, Presenters.PresenterName, Presenters.PhotoURL
FROM            Presenters CROSS JOIN
                     Programmes CROSS JOIN
                     Schedule
WHERE        (Schedule.Day = @FiltDay)

【问题讨论】:

  • 交叉连接?您真的需要所有可能组合的笛卡尔积吗?
  • 在按钮点击处理程序中,也许您应该为显示数据的控件调用DataBind

标签: asp.net sql-server vb.net tsql filtering


【解决方案1】:

也许它不是 100% 与您的问题相关,但您不应该在不同控件的事件中处理数据源初始化。

您需要填写 sql 参数,以便您处理数据源的Selecting 事件。

单击按钮为变量DateName 设置适当的值,并在选择数据源时使用变量填充sql 参数。

以这种方式行事,您可以轻松发现调用中的实际值并确定问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多