根据一个或两个用户输入执行SQL查询搜索,并用结果填充网格视图

本文关键字:搜索 查询 填充 视图 网格 SQL 结果 输入 一个 用户 两个 | 更新日期: 2023-09-27 18:03:32

我正在研究一个有两个文本字段的小型搜索表单:一个允许用户通过输入部分或完整的电子邮件地址或某人的姓名(这个文本框称为SearchName)来搜索工作列表(这基本上是一个愿望列表-不知道他们为什么要称之为"工作列表",但无论如何)。这个字段是必需的,当用户点击"Search"时,如果它是空白的,就会出现一个错误消息告诉他们。第二个文本框是可选的,它允许用户输入城市或州,以帮助进一步缩小搜索范围(这个文本框称为SearchLocation)。

我有一个函数(称为getJobLists()),搜索按钮使用它来获取结果。

就像现在一样,函数中根据在SearchName字段中输入的内容返回结果的部分工作得很好。然而,我不能得到任何搜索位置的结果。当我在SearchName中输入有效的电子邮件或姓名,然后在SearchLocation中输入有效的城市或州时,我没有得到任何结果。但是,如果我输入任何无效的东西(即与输入的电子邮件或名称不关联的城市),则会出现"no results found"消息。

我已经测试了两个SQL查询在我的搜索功能在SQL Server管理工作室,他们做的工作完美。

我在搜索函数中有一个try-catch,但是没有显示错误,甚至在控制台中也没有显示错误。

下面的代码:

protected void Page_Load(object sender, System.EventArgs e)
    {
        // CHECK IF THE WISHLIST SEARCH ENABLED
        StoreSettingsManager settings = AbleContext.Current.Store.Settings;
        if (!settings.WishlistSearchEnabled)
        {
            Response.Redirect(AbleCommerce.Code.NavigationHelper.GetHomeUrl());
            return;
        }
    }
    protected void getJobLists()
    {
       try 
       { 
           if (SearchName.Text != "")
           {//if SearchName.Text is not blank
               if (SearchLocation.Text != "")
               {//check to see if SearchLocation.Text is not blank either
                   string sqlSelect = "SELECT (FirstName +' '+ LastName) AS 'FullName', UserName,  (Address1 + ', ' +City + ', ' + Province) AS 'Address' FROM ac_Users INNER JOIN ac_Wishlists ON ac_Wishlists.UserId = ac_Users.UserId INNER JOIN ac_Addresses ON ac_Addresses.UserId = ac_Wishlists.UserId WHERE IsBilling ='true' AND (UserName LIKE '%'+@UserName+'%' OR (FirstName + LastName) LIKE '%'+@UserName+'%') AND ((City + Province) LIKE '%'+@Location+'%')";
                    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
                    {
                        SqlCommand cmd = new SqlCommand(sqlSelect, cn);
                        cmd.Parameters.AddWithValue("@UserName", String.Format("%{0}%", SearchName.Text));
                        cmd.Parameters.AddWithValue("@Location", String.Format("%{0}%", SearchLocation.Text));
                        cmd.CommandType = CommandType.Text;
                        cn.Open();
                        DataSet ds = new DataSet();
                        DataTable jobsListsTbl = ds.Tables.Add("jobsListsTbl");
                        jobsListsTbl.Columns.Add("User", Type.GetType("System.String"));
                        jobsListsTbl.Columns.Add("PrimaryAddress", Type.GetType("System.String"));
                        using (IDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                DataRow dr = jobsListsTbl.NewRow();
                                dr["User"] = reader["Name"];
                                dr["PrimaryAddress"] = reader["Address"];
                                jobsListsTbl.Rows.Add(dr);
                            }
                        }         
                        WishlistGrid.DataSource = ds;
                        WishlistGrid.DataMember = "jobsListsTbl";
                        WishlistGrid.DataBind();
                    }
               }//end of if(SearchLocation.Text !='')
               else
               {//if SearchLocation.Text is blank, then go with this code instead
                   string sqlSelect2 = "SELECT (FirstName +' '+ LastName) AS 'FullName', UserName,  (Address1 + ', ' +City + ', ' + Province) AS 'Address' FROM ac_Users INNER JOIN ac_Wishlists ON ac_Wishlists.UserId = ac_Users.UserId INNER JOIN ac_Addresses ON ac_Addresses.UserId = ac_Wishlists.UserId WHERE IsBilling ='true' AND (UserName LIKE '%'+@UserName+'%' OR (FirstName + LastName) LIKE '%'+@UserName+'%')";
                   using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
                   {
                       SqlCommand cmd = new SqlCommand(sqlSelect2, cn);
                       cmd.Parameters.AddWithValue("@UserName", String.Format("%{0}%", SearchName.Text));
                       cmd.CommandType = CommandType.Text;
                       cn.Open();
                       DataSet ds = new DataSet();
                       DataTable jobsListsTbl2 = ds.Tables.Add("jobsListsTbl2");
                       jobsListsTbl2.Columns.Add("User", Type.GetType("System.String"));
                       jobsListsTbl2.Columns.Add("PrimaryAddress", Type.GetType("System.String"));
                       using (IDataReader reader = cmd.ExecuteReader())
                       {
                           while (reader.Read())
                           {
                               DataRow dr = jobsListsTbl2.NewRow();
                               dr["User"] = reader["UserName"];
                               dr["PrimaryAddress"] = reader["Address"];
                               jobsListsTbl2.Rows.Add(dr);
                           }
                       }
                       WishlistGrid.DataSource = ds;
                       WishlistGrid.DataMember = "jobsListsTbl2";
                       WishlistGrid.DataBind();
                   }
               }//end if SearchLocation.Text is empty
            }//end of if SearchName.Text !==''   
           }
           catch (Exception x)
           {
               errors5.Text += "ERROR: " + x.Message.ToString() + "<br />";
           }
    }
    protected void SearchButton_Click(object sender, EventArgs e)
    {
        WishlistGrid.Visible = true;
        getJobLists();
    }

这是搜索表单的设计代码(注意:还没有为超链接设置NavigateUrl)。一旦搜索结果显示正确,我将设置它):

<div id="findWishlistPage" class="mainContentWrapper">
<div class="section">
<div class="introDiv">
    <div class="pageHeader">
        <h1>Find a Job List</h1>
    </div>
    <div class="content">
        <asp:label id="errors" runat="server" text=""></asp:label>
        <asp:label id="errors2" runat="server" text=""></asp:label>
        <asp:label id="errors3" runat="server" text=""></asp:label>
        <asp:label id="errors4" runat="server" text=""></asp:label>
        <asp:label id="errors5" runat="server" text=""></asp:label>
        <asp:UpdatePanel ID="Searchajax" runat="server">
            <ContentTemplate>
                <asp:Panel ID="SearchPanel" runat="server" EnableViewState="false" DefaultButton="SearchButton">
                    <asp:ValidationSummary ID="ValidationSummary1" runat="server" EnableViewState="false" />
                    <table class="inputForm">
                        <tr>
                            <th class="rowHeader">
                                <asp:Label ID="SearchNameLabel" runat="server" Text="Name or E-mail:" AssociatedControlID="SearchName" EnableViewState="false"></asp:Label>
                            </th>
                            <td>
                                <asp:Textbox id="SearchName" runat="server" onfocus="this.select()" Width="200px" EnableViewState="false"></asp:Textbox>
                                <asp:RequiredFieldValidator ID="SearchNameValdiator" runat="server" ControlToValidate="SearchName"
                                     Text="*" ErrorMessage="Name or email address is required." EnableViewState="false"></asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <th class="rowHeader">
                                <asp:Label ID="SearchLocationLabel" runat="server" Text="City or State (optional):" EnableViewState="false"></asp:Label>
                            </th>
                            <td>
                                <asp:TextBox id="SearchLocation" runat="server" onfocus="this.select()" Width="140px" EnableViewState="false"></asp:TextBox>
                                <asp:LinkButton ID="SearchButton" runat="server" CssClass="button linkButton" Text="Search" OnClick="SearchButton_Click" EnableViewState="false" />
                            </td>
                        </tr>
                    </table><br />
                    <asp:GridView ID="WishlistGrid" runat="server" AllowPaging="True" 
                        AutoGenerateColumns="False" ShowHeader="true" 
                        SkinID="PagedList" Visible="false" EnableViewState="false">
                        <Columns>
                            <asp:TemplateField HeaderText="Name">
                                <HeaderStyle CssClass="wishlistName" />
                                <ItemStyle CssClass="wishlistName" />
                                <ItemTemplate>
                                    <asp:HyperLink ID="WishlistLink" runat="server" >
                                        <%#Eval("User")%>
                                    </asp:HyperLink>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Location">
                                <HeaderStyle CssClass="wishlistLocation" />
                                <ItemStyle CssClass="wishlistLocation" />
                                <ItemTemplate> 
                                    <asp:Label ID="Location" runat="server" Text='<%#Eval("PrimaryAddress")%>'></asp:Label>
                                    <%--'<%#GetLocation(Eval("User.PrimaryAddress"))%>'--%>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                        <EmptyDataTemplate>
                            <asp:Localize ID="EmptySearchResult" runat="server" Text="There were no job lists matching your search criteria."></asp:Localize>
                        </EmptyDataTemplate>
                    </asp:GridView>
                </asp:Panel>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </div>
</div>

谁能告诉我我错过了什么或做错了吗?

根据一个或两个用户输入执行SQL查询搜索,并用结果填充网格视图

好了,我终于解决了这个问题。显然,这是我一直忽略的变量命名问题。但现在一切正常!:)