【问题标题】:Display results for next 30 days if selected date is not available?如果所选日期不可用,显示接下来 30 天的结果?
【发布时间】:2014-12-01 16:09:17
【问题描述】:

我们为用户提供了搜索特定日期的记录或按日期范围搜索的选项。

但是,如果用户选择的日期不可用,而不是显示未找到用户选择的消息,而是显示接下来三十天的记录。

到目前为止,我的查询显示的日期记录早于今天。

这是错误的。

你知道下面的代码有什么问题吗?

If ViewSelect = "Range" Then
    sb.Append(If(startedWhere, andors, " WHERE "))
    sb.Append("(CONVERT(VARCHAR(10), facilityAvailabilityDate, 101) >= @FromDate And CONVERT(VARCHAR(10), facilityAvailabilityDate, 101) <= @EndDate)")
    cmd.Parameters.AddWithValue("@FromDate", txtFromDate.Text)
    cmd.Parameters.AddWithValue("@EndDate", txtToDate.Text)
    startedWhere = True

ElseIf ViewSelect = "Specific" Then
    sb.Append(If(startedWhere, andors, " WHERE "))
    sb.Append("(CONVERT(VARCHAR(10), facilityAvailabilityDate, 101) = @SpecificDate)")
    cmd.Parameters.AddWithValue("@SpecificDate", txtSpecificDate.Text)
    startedWhere = True
End If

cmd.CommandText = sb.ToString()
'Response.Write(sb)
'Response.End()
' Dim cmd As New SqlCommand(strQuery) 
Dim dt As DataTable = GetData(cmd)

'No records found, so display records for next 30 days. 
If dt.Rows.Count = 0 Then

    cmd.Parameters.Clear()
    cmd.Parameters.AddWithValue("@FromDate", Date.Today.AddMonths(-1))
    cmd.Parameters.AddWithValue("@EndDate", Date.Today.ToString("MM/dd/yyyy"))

    cmd.CommandText = "Select siteID,siteName,bldgName,Capacity,AvailableFacilities,facilityAvailabilityDate,Status " & _
",amenities,[Rental Fees] RentalFees,[Extra Hour Fees] ExtraHourFees,[Deposit Fees] DepositFees,[Cancellation Fees] CancelFees,[Key Deposit Fees] KeyDepFees, Duration " & _
" FROM ParksNRecsData" & _
" where facilityAvailabilityDate Between @FromDate And @EndDate"
    dt = GetData(cmd)
End If

GridView1.DataSource = dt
GridView1.DataBind()

SQL Server 是首选数据库。

提前致谢

【问题讨论】:

  • 您的代码似乎选择了前 30 天的记录,而不是未来 30 天的记录。您不需要 FromDate 等于今天的日期,而 EndDate 是 date.AddMonths(1) 吗?

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


【解决方案1】:

这段代码选择的是上个月的日期,而不是下个月的日期:

If dt.Rows.Count = 0 Then

    cmd.Parameters.Clear()
    cmd.Parameters.AddWithValue("@FromDate", Date.Today.AddMonths(-1))
    cmd.Parameters.AddWithValue("@EndDate", Date.Today.ToString("MM/dd/yyyy"))

将其更改为以下内容应该可以达到您想要的效果:

If dt.Rows.Count = 0 Then

    cmd.Parameters.Clear()
    cmd.Parameters.AddWithValue("@FromDate", Date.Today)
    cmd.Parameters.AddWithValue("@EndDate", Date.Today.AddMonths(1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2014-03-23
    相关资源
    最近更新 更多