从 INT 列中提取的搜索页面的复选框
CheckBox from Search Page pulling from an INT Column
我从数据库的多个字段中提取的搜索页面存在一个小问题。我正在为此构建的客户想要合并一个复选框字段,该字段在检查后会拉出所有在列中没有空的事件,该事件是作为int列设置的。我已经为此工作了几天,但无法通过在线和此处的所有资源来解决这个问题。下面是一些与搜索页面和相关查询有关的代码。我不会全部给出,因为它是一大块代码,但我会给出必要的项目,
Search.ascx
<telerik:CompositeLayoutColumn Span="4" Height="30px">
<Content>
<asp:CheckBox ID="cbAnnulledTrips" runat="server" Text="Annulled Trips" />
</Content>
</telerik:CompositeLayoutColumn>
Search.ascx.cs
SqlParameter annulledTripsParameter = new SqlParameter("@AnnulledTrips", SqlDbType.Bit);
annulledTripsParameter.Direction = ParameterDirection.Input;
if (!cbAnnulledTrips.Checked)
annulledTripsParameter.Value = Convert.ToInt32(0);
else
annulledTripsParameter.Value = Convert.ToInt32(1);
selectCommand.Parameters.Add(annulledTripsParameter);
sp_SearchResults_ByAllFields
ALTER PROCEDURE [dbo].[sp_SearchResults_ByAllFields]
(
@StartDate varchar(50) = NULL,
@EndDate varchar(50) = NULL,
@OccurrenceNumber varchar(50) = NULL,
@TrainLine int = NULL,
@TrainID int = NULL,
@CarID int = NULL,
@CategoryType int = NULL,
@OccurrenceType int = NULL,
@AnnulledTrips bit,
@TrainOperator varchar(50) = NULL
)
AS
DECLARE @DateFrom DateTime
SET @DateFrom = Convert(DateTime, @StartDate)
DECLARE @DateTo DateTime
SET @DateTo = Convert(DateTime, @EndDate)
BEGIN
SET NOCOUNT ON;
SELECT o.OccurrenceID AS [Occurrence ID],
o.OccurrenceNumber AS [Occurrence],
o.OccurrenceDateTime AS [Occurrence Date],
l.TrainLine AS [Train Line],
o.TrainID AS [Train ID],
o.LeadCar AS [Lead Car],
o.Car2 AS [Car 2],
o.Car3 AS [Car 3],
o.Car4 AS [Car 4],
op.FirstName + ' ' + op.LastName AS [Operator],
ct.CategoryType AS [Category],
ot.OccurrenceType AS [Type]
FROM Occurrence o
LEFT JOIN Location lo ON lo.ID = o.LocationID
LEFT JOIN Line l ON l.ID = lo.LineID
LEFT JOIN OccurrenceCategory oc ON oc.ID = o.OccurrenceCategoryID
LEFT JOIN CategoryType ct ON ct.ID = oc.CategoryTypeID
LEFT JOIN OccurrenceType ot ON ot.ID = oc.OccurrenceTypeID
LEFT JOIN Operator op ON op.ID = o.OperatorID
WHERE (OccurrenceDateTime >= @DateFrom OR @DateFrom IS NULL)
AND (OccurrenceDateTime <= @DateTo OR @DateTo IS NULL)
AND (o.OccurrenceNumber = @OccurrenceNumber OR @OccurrenceNumber IS NULL)
AND (l.ID = @TrainLine OR @TrainLine IS NULL)
AND (o.TrainID = @TrainID OR @TrainID IS NULL)
AND (o.LeadCar = @CarID OR o.Car2 = @CarID OR o.Car3 = @CarID OR o.Car4 = @CarID OR @CarID IS NULL)
AND (CASE @AnnulledTrips
WHEN 0 THEN (CASE o.AnnulledTrips IS NULL)
WHEN 1 THEN (CASE o.AnnulledTrips IS NOT NULL)
END)
AND (ct.ID = @CategoryType OR @CategoryType IS NULL)
AND (ot.ID = @OccurrenceType OR @OccurrenceType IS NULL)
AND (o.OperatorID = @TrainOperator OR @TrainOperator IS NULL)
END
我在 WHERE 子句中尝试执行的操作为您提供了整个存储过程,但当然,它似乎不起作用。如果您需要我 post 更多代码,请告诉我,我会的。其他一切都很好,但是是的......我没有意识到这是一个如此大的挑战......请帮助!我要疯了!
尝试更改存储过程的这一部分
AND (CASE @AnnulledTrips
WHEN 0 THEN (CASE o.AnnulledTrips IS NULL)
WHEN 1 THEN (CASE o.AnnulledTrips IS NOT NULL)
END)
对此:
AND (
(@AnnulledTrips = 0 AND o.AnnulledTrips IS NULL)
OR (@AnnulledTrips = 1 AND o.AnnulledTrips IS NOT NULL)
)
这是基于您当前的尝试,我不确定这是否符合您对
的初步描述
a checkbox field that, when checked, would pull all occurrences that
doesn't have a null in the column
因为您尝试实现的逻辑意味着如果未选中该复选框,那么它只会提取 AnnulledTrips 为 NULL 的记录。
如果这不是您想要的,那么只需从我上面的代码中删除 "AND o.AnnulledTrips IS NULL"。
我从数据库的多个字段中提取的搜索页面存在一个小问题。我正在为此构建的客户想要合并一个复选框字段,该字段在检查后会拉出所有在列中没有空的事件,该事件是作为int列设置的。我已经为此工作了几天,但无法通过在线和此处的所有资源来解决这个问题。下面是一些与搜索页面和相关查询有关的代码。我不会全部给出,因为它是一大块代码,但我会给出必要的项目,
Search.ascx
<telerik:CompositeLayoutColumn Span="4" Height="30px">
<Content>
<asp:CheckBox ID="cbAnnulledTrips" runat="server" Text="Annulled Trips" />
</Content>
</telerik:CompositeLayoutColumn>
Search.ascx.cs
SqlParameter annulledTripsParameter = new SqlParameter("@AnnulledTrips", SqlDbType.Bit);
annulledTripsParameter.Direction = ParameterDirection.Input;
if (!cbAnnulledTrips.Checked)
annulledTripsParameter.Value = Convert.ToInt32(0);
else
annulledTripsParameter.Value = Convert.ToInt32(1);
selectCommand.Parameters.Add(annulledTripsParameter);
sp_SearchResults_ByAllFields
ALTER PROCEDURE [dbo].[sp_SearchResults_ByAllFields]
(
@StartDate varchar(50) = NULL,
@EndDate varchar(50) = NULL,
@OccurrenceNumber varchar(50) = NULL,
@TrainLine int = NULL,
@TrainID int = NULL,
@CarID int = NULL,
@CategoryType int = NULL,
@OccurrenceType int = NULL,
@AnnulledTrips bit,
@TrainOperator varchar(50) = NULL
)
AS
DECLARE @DateFrom DateTime
SET @DateFrom = Convert(DateTime, @StartDate)
DECLARE @DateTo DateTime
SET @DateTo = Convert(DateTime, @EndDate)
BEGIN
SET NOCOUNT ON;
SELECT o.OccurrenceID AS [Occurrence ID],
o.OccurrenceNumber AS [Occurrence],
o.OccurrenceDateTime AS [Occurrence Date],
l.TrainLine AS [Train Line],
o.TrainID AS [Train ID],
o.LeadCar AS [Lead Car],
o.Car2 AS [Car 2],
o.Car3 AS [Car 3],
o.Car4 AS [Car 4],
op.FirstName + ' ' + op.LastName AS [Operator],
ct.CategoryType AS [Category],
ot.OccurrenceType AS [Type]
FROM Occurrence o
LEFT JOIN Location lo ON lo.ID = o.LocationID
LEFT JOIN Line l ON l.ID = lo.LineID
LEFT JOIN OccurrenceCategory oc ON oc.ID = o.OccurrenceCategoryID
LEFT JOIN CategoryType ct ON ct.ID = oc.CategoryTypeID
LEFT JOIN OccurrenceType ot ON ot.ID = oc.OccurrenceTypeID
LEFT JOIN Operator op ON op.ID = o.OperatorID
WHERE (OccurrenceDateTime >= @DateFrom OR @DateFrom IS NULL)
AND (OccurrenceDateTime <= @DateTo OR @DateTo IS NULL)
AND (o.OccurrenceNumber = @OccurrenceNumber OR @OccurrenceNumber IS NULL)
AND (l.ID = @TrainLine OR @TrainLine IS NULL)
AND (o.TrainID = @TrainID OR @TrainID IS NULL)
AND (o.LeadCar = @CarID OR o.Car2 = @CarID OR o.Car3 = @CarID OR o.Car4 = @CarID OR @CarID IS NULL)
AND (CASE @AnnulledTrips
WHEN 0 THEN (CASE o.AnnulledTrips IS NULL)
WHEN 1 THEN (CASE o.AnnulledTrips IS NOT NULL)
END)
AND (ct.ID = @CategoryType OR @CategoryType IS NULL)
AND (ot.ID = @OccurrenceType OR @OccurrenceType IS NULL)
AND (o.OperatorID = @TrainOperator OR @TrainOperator IS NULL)
END
我在 WHERE 子句中尝试执行的操作为您提供了整个存储过程,但当然,它似乎不起作用。如果您需要我 post 更多代码,请告诉我,我会的。其他一切都很好,但是是的......我没有意识到这是一个如此大的挑战......请帮助!我要疯了!
尝试更改存储过程的这一部分
AND (CASE @AnnulledTrips
WHEN 0 THEN (CASE o.AnnulledTrips IS NULL)
WHEN 1 THEN (CASE o.AnnulledTrips IS NOT NULL)
END)
对此:
AND (
(@AnnulledTrips = 0 AND o.AnnulledTrips IS NULL)
OR (@AnnulledTrips = 1 AND o.AnnulledTrips IS NOT NULL)
)
这是基于您当前的尝试,我不确定这是否符合您对
的初步描述a checkbox field that, when checked, would pull all occurrences that doesn't have a null in the column
因为您尝试实现的逻辑意味着如果未选中该复选框,那么它只会提取 AnnulledTrips 为 NULL 的记录。
如果这不是您想要的,那么只需从我上面的代码中删除 "AND o.AnnulledTrips IS NULL"。