【问题标题】:Search a table in sql server via single text box通过单个文本框在 sql server 中搜索表
【发布时间】:2017-07-03 09:22:28
【问题描述】:

我在 sql server 数据库中有一个表,并且有一些列。 我想通过文本框搜索它,这是场景: 例如,有 3 列名为:“名称、编号、代码” 我想在文本框中输入数字 88,然后点击搜索按钮,每行包含 88 的单元格都会在网格视图中显示给我。(88 是该单元格的一部分,例如,有一个包含 2256887 的单元格,我希望显示该单元格) 我试图解决,但有两个问题。首先是:我一次只能搜索一列,其次,如果我输入 225688 ,它不会显示任何内容,直到我在文本框中输入整个 2256887 。
这是aspx页面中的代码:

<asp:Label ID="Label1" runat="server" Text="متن ورودی برای جستجو:"></asp:Label>

<asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>

<asp:Button ID="btnSearch" runat="server" Text="search" OnClick="btnSearch_Click" />

<asp:GridView ID="searchresults" runat="server"></asp:GridView>

以及cs页面中的代码:

using System.Data;
using System.Data.SqlClient;

protected void btnSearch_Click(object sender, EventArgs e)
    {
        String strConn = "Data Source=DESKTOP-MQ1PNVA\\SQLEXPRESS;Initial Catalog=linkfinderdb;Integrated Security=True";
        SqlConnection conn = new SqlConnection(strConn);
        conn.Open();
        SqlCommand cmd = new SqlCommand("Select * FROM linktest WHERE phone=@txtSearch", conn);

        try
        {

            SqlParameter search = new SqlParameter();
            search.ParameterName = "@txtSearch";
            search.Value = txtSearch.Text.Trim();

            cmd.Parameters.Add(search);
            SqlDataReader dr = cmd.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Load(dr);

            searchresults.DataSource = dt;
            searchresults.DataBind();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        {
            conn.Close();
        }
    }


phone 是表中的列名。
提前致谢。

【问题讨论】:

  • 您在 SQL 查询中使用 =,您想使用 LIKE。

标签: asp.net sql-server


【解决方案1】:

尝试使用带 OR 条件的 LIKE。

例如:如果您的列名是姓名、电话和代码,

 String strConn = "Data Source=DESKTOP-MQ1PNVA\\SQLEXPRESS;Initial Catalog=linkfinderdb;Integrated Security=True";
    SqlConnection conn = new SqlConnection(strConn);
    conn.Open();

    string CommandText= "Select * FROM linktest WHERE phone LIKE @txtSearch OR name LIKE @txtSearch OR code LIKE @txtSearch";

    try
    {
        string searchTerm = string.Format("%{0}%", txtSearch.Text.Trim());
        Command = new SqlCommand(CommandText, conn);
        Command.Parameters.Add(new SqlParameter("@txtSearch", searchTerm));
        SqlDataReader dr = Command.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);

        searchresults.DataSource = dt;
        searchresults.DataBind();
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
    finally
    {
        conn.Close();
    }

【讨论】:

  • 谢谢。但我收到错误:'@txtSearch' 附近的语法不正确。我刚刚用我的替换了你的代码行
  • 你在什么时候得到错误?是SqlDataReader dr = cmd.ExecuteReader();
  • 试试这个SqlCommand cmd = new SqlCommand("Select * FROM linktest WHERE phone LIKE @txtSearch OR name LIKE @txtSearch OR code LIKE @txtSearch", conn);
  • 当我点击搜索时,我看到文本框上方的错误。我删除了 txtSearch 周围的“”,错误消失了,但还有一个大问题。我必须输入一个单元格的整个文本才能找到它并显示该行。例如,有 4 行包含这 4 个代码: 22336541 、 22889654 、 77558847 、 66332588。我想在文本框中输入 88 并在其代码单元格中查看包含 88 的所有 4 行,但现在我必须输入 66332588 才能看到那一行。我怎样才能做到这一点?
  • 使用通配符选项,请参考这个link的答案
猜你喜欢
  • 2011-02-17
  • 2013-04-19
  • 2013-08-05
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多