C# 搜索页面中的复选框从INT列中提取

C# 搜索页面中的复选框从INT列中提取,c#,asp.net,sql-server,search,C#,Asp.net,Sql Server,Search,我从一个数据库的多个字段中创建了一个搜索页面,但这个页面有一个小问题。我为其构建此功能的客户希望合并一个复选框字段,选中该字段时,将提取列中不包含null的所有匹配项,该列被设置为int列。我已经在这方面工作了几天了,但是在这里和网上的所有资源中,我都无法找到答案。这里有一些代码,包括搜索页面和与之相关的查询。我不打算全部给出,因为这是一大块代码,但我会给出必要的项目 Search.ascx <telerik:CompositeLayoutColumn Span="4" Height="3

我从一个数据库的多个字段中创建了一个搜索页面,但这个页面有一个小问题。我为其构建此功能的客户希望合并一个复选框字段,选中该字段时,将提取列中不包含null的所有匹配项,该列被设置为int列。我已经在这方面工作了几天了,但是在这里和网上的所有资源中,我都无法找到答案。这里有一些代码,包括搜索页面和与之相关的查询。我不打算全部给出,因为这是一大块代码,但我会给出必要的项目

Search.ascx

<telerik:CompositeLayoutColumn Span="4" Height="30px">
    <Content>
        <asp:CheckBox ID="cbAnnulledTrips" runat="server" Text="Annulled Trips" />
    </Content>
</telerik:CompositeLayoutColumn>
sp_搜索结果_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
alterprocedure[dbo]。[sp\u SearchResults\u ByAllFields]
(
@StartDate varchar(50)=空,
@EndDate varchar(50)=空,
@发生数varchar(50)=空,
@列车线int=NULL,
@TrainID int=NULL,
@CarID int=NULL,
@CategoryType int=NULL,
@发生类型int=NULL,
@环形钻头,
@TrainOperator varchar(50)=空
)
作为
声明@DateFrom DateTime
设置@DateFrom=Convert(DateTime,@StartDate)
声明@DateToDateTime
设置@DateTo=Convert(DateTime,@EndDate)
开始
不计数;
选择o.OccurrenceID作为[事件ID],
o、 发生次数为[发生次数],
o、 发生日期时间为[发生日期],
l、 列车线作为[列车线],
o、 列车ID为[列车ID],
o、 铅车作为[铅车],
o、 Car2作为[Car2],
o、 Car3作为[Car 3],
o、 Car4作为[Car4],
op.FirstName+“”+op.LastName作为[操作员],
ct.CategoryType为[类别],
ot.发生类型为[类型]
从发生到
lo.ID上的左连接位置lo=o.LocationID
l.ID上的左连接线l=lo.LineID
oc.ID=o.OccurrenceCategoryID上的左联接发生类别oc
在ct.ID=oc.CategoryTypeID上左连接CategoryType ct
ot.ID上的左连接发生类型ot=oc.OccurrenceTypeID
左连接运算符op ON op.ID=o.OperatorID
其中(OccurrenceDateTime>=@DateFrom或@DateFrom为空)

并且(OccurrenceDateTime尝试更改存储过程的这一部分

  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)
)
这是基于你目前的尝试,我不确定是否符合你最初的描述

复选框字段,选中该字段时,将拉取所有 列中没有空值

因为您试图实现的逻辑意味着,如果未选中该复选框,那么它将只提取具有NULL for CignaledTrips的记录


如果这不是您想要的,那么只需从我上面的代码中删除“AND o.annoulledtrips IS NULL”。

哦,我的天啊!!!!这太容易了,老兄,非常感谢!是的,如果复选框未选中,我想提取所有内容,包括NULL和not NULL,所以我照您所说的做并删除了“AND o.annoulledtrips IS NULL”从那里开始,砰的一声!!!你太棒了。
AND (
  (@AnnulledTrips = 0 AND o.AnnulledTrips IS NULL)
  OR (@AnnulledTrips = 1 AND o.AnnulledTrips IS NOT NULL)
)