Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Where、LIKE或组合问题与空白文本框_Sql_Asp.net_Sql Server - Fatal编程技术网

SQL Where、LIKE或组合问题与空白文本框

SQL Where、LIKE或组合问题与空白文本框,sql,asp.net,sql-server,Sql,Asp.net,Sql Server,我有以下问题 SELECT FullUrl ,Title ,NextWebGroupId ,TimeCreated FROM AllWebsTest WHERE (Title LIKE '%' + @Title + '%') OR (FullUrl LIKE '%' + @FullUrl + '%') 标题和完整URL是通过文本框设置的参数 我所期望的是 若我把文本放在标题文本框中进行搜索,它不会给出任何结果,只有在FullURL文本框中放入一些字符串甚至空格,

我有以下问题

SELECT FullUrl
    ,Title
    ,NextWebGroupId
    ,TimeCreated
FROM AllWebsTest
WHERE (Title LIKE '%' + @Title + '%')
    OR (FullUrl LIKE '%' + @FullUrl + '%')
标题和完整URL是通过文本框设置的参数

我所期望的是

  • 若我把文本放在标题文本框中进行搜索,它不会给出任何结果,只有在FullURL文本框中放入一些字符串甚至空格,我才能得到结果
  • 反之亦然-如果标题为空(也没有空格),我将搜索词放在fullurl文本框中,我不会得到任何结果
  • 我如何处理空白文本框,以便只在其中一个框中放置搜索词应返回结果

    如果我直接在SQL server中进行查询,这很好。但通过asp.NETWebForm,其给出的问题

    更新1:我尝试了以下解决方案,但从逻辑上讲,如果其中一个文本框未被触动,我仍然没有得到结果。特殊性格会有问题吗?下面是确切的标签

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT FullUrl, Title, NextWebGroupId, TimeCreated FROM AllWebsTest WHERE (Title LIKE '%' + ISNULL(@Title, '') + '%') OR (FullUrl LIKE '%' + ISNULL(@FullUrl, '') + '%')">
                <SelectParameters>
                    <asp:ControlParameter ControlID="txtSearch" Name="Title" PropertyName="Text" Type="String" />
                    <asp:ControlParameter ControlID="Textsearch2" Name="FullUrl" PropertyName="Text" Type="String" />
                </SelectParameters>
            </asp:SqlDataSource>
    
    
    
    尝试此查询:

    SELECT FullUrl
        ,Title
        ,NextWebGroupId
        ,TimeCreated
    FROM AllWebsTest
    WHERE (Title LIKE '%' + ISNULL(@Title, '') + '%')
        AND (FullUrl LIKE '%' + ISNULL(@FullUrl, '') + '%')
    
    看看这个,确认这个行为是你所期望的

    此查询仅在将值传递给变量之一时过滤行,
    @title
    @fullURL
    (并返回与条件匹配的行)。否则它将返回所有结果

    在您最近的评论后更新:

    SELECT FullUrl
        ,Title
        ,NextWebGroupId
        ,TimeCreated
    FROM AllWebsTest
    WHERE (Title LIKE '%' + ISNULL(LTRIM(@Title), '') + '%')
        AND (FullUrl LIKE '%' + ISNULL(LTRIM(@FullUrl), '') + '%')
    

    下面是一个关于上述代码如何工作的示例。

    最有可能的情况是使用了
    NULL
    而不是空字符串,从而导致出现
    的标题,如NULL
    ,这将失败。请尝试以下操作,显式检查null大小写:

    SELECT FullUrl, Title, NextWebGroupId, TimeCreated
    FROM AllWebsTest 
    WHERE (@Title IS NULL OR Title LIKE '%' + @Title + '%')
    OR (@FullUrl IS NULL OR FullUrl LIKE '%' +  @FullUrl + '%')
    
    试试这个

    Create proc search
     @Title varchar(20) = null,
    @FullUrl varchar(20)=  null, 
    as
    begin
     SELECT FullUrl
        ,Title
        ,NextWebGroupId
        ,TimeCreated
    FROM AllWebsTest
    WHERE (@Title = null or Title LIKE '%' + @Title + '%')
        OR (@FullUrl = null or FullUrl LIKE '%' + @FullUrl + '%') 
    end
    

    如果传递的字符串为null或空,请尝试与标题一起检查

    SELECT FullUrl
        ,Title
        ,NextWebGroupId
        ,TimeCreated
    FROM AllWebsTest
    WHERE ( ISNULL(@Title,'') != '' AND Title LIKE '%' + @Title + '%')
        OR (ISNULL(@FullUrl,'') != '' AND FullUrl LIKE '%' + @FullUrl + '%')
    

    我不确定这是否会过滤任何内容,因为如果您不将值传递给这两个变量中的一个,假设您只传递
    @title
    的值,那么
    或(@FullURL为NULL或…
    将始终为真,因此返回所有行()尝试了此操作,但仍然没有使用单框搜索词的结果。请参阅更新的问题。@这是完全相同的查询吗?在
    WHERE
    子句的两个条件之间使用
    而不是
    ?是..这正是预期的行为。但放置和正在执行,如果两个框中的文本匹配,则返回结果,否则为空。真的不确定,为什么它对我不起作用。与
    相反,在
    WHERE
    子句的两个条件之间,使用单个文本框可以很好地工作,
    可以使它在为两个变量指定值时正常工作。但是将
    ISNULL
    应用于变量也会为查询生成
    效果,因此您不会丢失此案例。我想我可能已经发现了问题,因此textbox返回空字符串,我们正在检查null值。即使用空字符串测试你的小提琴,它也不能用。因此,与上述要求相同,但字符串为空。是否有任何一个语句可以处理所有组合?请尝试使用SQL Server Profiler查看从应用程序发送并在服务器上执行的查询。然后,如果需要,我们可以回溯并进行更正..我最终将query is aspx.cs文件改为direct。欢迎您,感谢您通知我们您的最终解决方案。