【问题标题】:Selecting "ALL" and passing multiple values into Select Statement Parameter from DropDownList从 DropDownList 中选择“ALL”并将多个值传递给 Select 语句参数
【发布时间】:2017-07-31 01:23:02
【问题描述】:

所以,我有一份报告说我正在为 Web 构建 Visual Studio Express 2015。我有一个 Select 语句来检索数据,使用 (3) 参数(@StartDate、@EndDate、@Equipment)。剥离它,select 语句如下所示:

Select * from Schedule
Where CAST(ScheduleDate as date) BETWEEN (@StartDate) AND @EndDate) AND 
EquipmentName IN (@Equipment)

所以,在 @Equipment 的 DropDownList 中,假设我有单独的值,例如: 机器A,机器B,机器C。当我选择一台单独的机器时,一切都很好,但是,我想添加一个名为“全部”的选择。通过添加值的 DropDownList 任务,我添加了另一个名为 'All' 的项目,其值为 'MachineA'、'MachineB'、'MachineC',我认为该值将被放入 @Equipment 参数中以用于IN 条件。

好吧,当我从下拉列表中选择“全部”时,我没有收到错误消息,但我也没有得到任何结果。我至少在 SSMS 中确认了 select 语句的语法是正确的,所以我怀疑在 VS 中传递给 SQL 查询的值的格式不正确。

任何想法将不胜感激!

添加了实际 DropDownList 的代码。底部名为“ALL”的 ListItem 是它没有转换为我的 select 语句的 IN 条件的项目。

<h3 style="text-align: center">
            Equipment:
            <asp:DropDownList ID="EquipmentDownList1" runat="server">
                <asp:ListItem></asp:ListItem>
                <asp:ListItem Value="CARM1">CARM1</asp:ListItem>
                <asp:ListItem Value="CT1">CT1</asp:ListItem>
                <asp:ListItem Value="CT2">CT2</asp:ListItem>
                <asp:ListItem Value="DEXA">DEXA</asp:ListItem>
                <asp:ListItem Value="FL1">FL1</asp:ListItem>
                <asp:ListItem Value="IR">IR</asp:ListItem>
                <asp:ListItem Value="MAM1">MAM1</asp:ListItem>
                <asp:ListItem Value="MAM2">MAM2</asp:ListItem>
                <asp:ListItem Value="MRI1">MRI1</asp:ListItem>
                <asp:ListItem Value="NM1">NM1</asp:ListItem>
                <asp:ListItem Value="PET1">PET1</asp:ListItem>
                <asp:ListItem Value="US1">US1</asp:ListItem>
                <asp:ListItem Value="US2">US2</asp:ListItem>
                <asp:ListItem Value="XR1">XR1</asp:ListItem>
                <asp:ListItem Value="XR2">XR2</asp:ListItem>
                <asp:ListItem Value="'CARM1','CT1','CT2','DEXA','FL1','IR','MAM1','MAM2','MRI1','NM1','PET1','US1','US2','XR1','XR2'">ALL</asp:ListItem>
            </asp:DropDownList>

SQL: resname.ResourceDescription IN (@Equipment) 是我在为 @Equipment 传递多个值时遇到问题的地方

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SHConnectionString %>" SelectCommand="SELECT DISTINCT 
                        CONVERT(varchar(10), app.ScheduledStartDtm, 101) AS 'Date', CONVERT(varchar(5), app.ScheduledStartDtm, 108) AS 'Start Time', CONVERT(varchar(5), app.ScheduledEndDtm, 108) AS 'End Time', visit.ClientDisplayName AS 'Client Name', visit.IDCode AS 'Client ID', 
                         visit.VisitIDCode AS 'Visit ID', loc.Name AS Location, event.EventName, provider.Name AS 'Ordering Provider', app.Comp AS 'Reason', '(' + hphone.AreaCode + ') ' + SUBSTRING(hphone.PhoneNumber, 0, 4) + '-' + SUBSTRING(hphone.PhoneNumber, 4, 4) AS 'Phone'
FROM            Appointment AS app INNER JOIN
                         ApptEvtResource AS equip ON equip.AppointmentID = app.AppointmentID INNER JOIN
                         Resource AS resname ON resname.ResourceID = equip.ResourceID INNER JOIN
                         Visit AS visit ON visit.GUID = app.ClientVisitGUID INNER JOIN
                         Provider AS provider ON provider.GUID = app.ProviderGUID INNER JOIN
                         Location AS loc ON loc.GUID = app.LocationGUID INNER JOIN
                         Event AS event ON event.EventID = app.EventID LEFT OUTER JOIN
                         Phone AS hphone ON hphone.PersonGUID = visit.ClientGUID AND hphone.PhoneType = 'Home' AND hphone.Active = 'True'
WHERE       resname.ResourceDescription IN (@Equipment) AND (app.AppointmentStatus &lt;&gt; 'CANCELLED') AND CAST(app.ScheduledStartDtm as date) between @StartDate and @EndDate
ORDER BY 'Date','Start Time'">
            <SelectParameters>
                <asp:ControlParameter ControlID="EquipmentDownList1" Name="Equipment" PropertyName="SelectedValue" DefaultValue="" />
                <asp:ControlParameter ControlID="StartDateBox" Name="StartDate" PropertyName="Text" />
                <asp:ControlParameter ControlID="EndDateBox" Name="EndDate" PropertyName="Text" />
            </SelectParameters>

【问题讨论】:

  • 请张贴代码。我们如何在没有任何代码的情况下提供帮助? Read this
  • 嗨 Rick,你指的是 aspx 背后的源代码吗?
  • 后面的最少代码也有助于了解如何构建查询以及如何传递参数。

标签: sql asp.net visual-studio


【解决方案1】:

我建议您更改 ALL 响应的值以删除单引号。然后修改你的 Where 子句:

Select * from Schedule
Where CAST(ScheduleDate as date) BETWEEN (@StartDate) AND @EndDate)
AND EquipmentName like '%' + @Equipment + '%'

这假定列表中的设备名称都不是列表中的设备名称的子字符串。

【讨论】:

  • 感谢您的回复。我不相信这会起作用,因为我想在@Equipment 中为 IN 条件实际传递所有实际设备名称(MachineA、MachineB、MachineC)。抱歉,如果我不清楚,但我从下拉列表中选择了“全部”,但附加到“全部”的值实际上是“MachineA”、“MachineB”、“MachineC”。
  • 已更新以匹配您喜欢的值。
  • 重新阅读编辑的问题,我已经恢复到原来的sn-p。我建议您将值“All”返回给您的参数。
  • 谢谢 Degan,但仍然没有结果。我用 DropDownList 的实际代码更新了我的原始帖子。
  • 这是个好问题。我必须提供机器名称的原因是因为实际上机器比我列出的要多。我只需要为那些选定的机器运行它。我确实得到了你的建议(再次感谢)在上面工作,但后来我得到了我不想包含的机器的额外记录。我希望这是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多