【发布时间】: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 <> '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