Sql 选择";“全部”;并将多个值从DropDownList传递到Select语句参数中

Sql 选择";“全部”;并将多个值从DropDownList传递到Select语句参数中,sql,asp.net,visual-studio,Sql,Asp.net,Visual Studio,因此,我有一份报告说,我正在为Web构建Visual Studio Express 2015。我有一个Select语句,使用(3)个参数(@StartDate、@EndDate、@device)检索数据。将其拆分,select语句如下所示: Select * from Schedule Where CAST(ScheduleDate as date) BETWEEN (@StartDate) AND @EndDate) AND EquipmentName IN (@Equipment) 因此

因此,我有一份报告说,我正在为Web构建Visual Studio Express 2015。我有一个Select语句,使用(3)个参数(@StartDate、@EndDate、@device)检索数据。将其拆分,select语句如下所示:

Select * from Schedule
Where CAST(ScheduleDate as date) BETWEEN (@StartDate) AND @EndDate) AND 
EquipmentName IN (@Equipment)
因此,在我的@Equipment下拉列表中,假设我有单独的值,例如: 机甲,机甲,机甲。当我选择一台单独的机器时,一切都很好,但是,我想添加一个名为“All”的选项。通过添加值的DropDownList任务,我添加了另一个名为“All”的项目,其值为“MachineA”、“MachineB”、“MachineC”,认为该值将被放入@Equipment参数中,以用于in条件

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

任何想法都将不胜感激

添加了实际下拉列表的代码。底部名为“ALL”的ListItem是它在select语句的条件下不会转换为的项

<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>

设备:
CARM1
CT1
CT2
德莎
FL1
红外光谱
妈妈1
妈妈2
MRI1
NM1
PET1
US1
US2
XR1
XR2
全部的
(@Equipment)中的SQL:resname.ResourceDescription是我在为@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>

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

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

这假设列表中没有设备名称是列表中设备名称的子字符串。

请发布代码。没有任何代码,我们如何提供帮助?嘿,瑞克,你指的是aspx背后的源代码吗?最简单的背后代码也有助于了解查询是如何生成的,以及参数是如何传递的。谢谢你的回复。我不相信这会起作用,因为我希望实际通过@equipment中的所有实际设备名称(MachineA、MachineB、MachineC)以获得in状态。如果我不清楚,很抱歉,我从下拉列表中选择了“全部”,但附加到“全部”的值实际上是“MachineA”、“MachineB”、“MachineC”。已更新以匹配您喜欢的值。重新阅读编辑过的问题,我已恢复到原始代码段。我建议您将值“All”返回到参数中。谢谢Degan,但仍然没有结果。我用DropDownList的实际代码更新了我原来的帖子。这是个好问题。我必须提供机器名称的原因是,实际上有比我列出的更多的机器。我只需要运行这些选定的机器。我确实得到了你的建议(再次感谢)去做上面的工作,但是我得到了我不想包含的机器的额外记录。我希望这是有道理的。