Nomfundo Cindi Ответов: 1

Как выполнить поиск по двум текстовым полям из базы данных и отобразить их в gridview


У меня есть 2 текстовых поля на странице asp и одна кнопка поиска. Пользователи могут выполнять поиск, вводя текст в любое из полей поиска. Я использую GridView в шаблон товар и связать с набором данных. пожалуйста, скажите мне, как искать данные по текстовому полю. например: пользователь может выполнять поиск, вводя данные во все 2 текстовых поля или 3 текстовых поля. пожалуйста, предоставьте мне любой код или предложение для asp.net с#

Что я уже пробовал:

protected void SearchButton_Click(object sender, EventArgs e)
{
   string str = "Select [ITEM No#], [Company Name], [Discipline Required], [Service Description], Institution, [Award Date] from PSP_Report where ([ITEM NO#] like '%' + @search + '%' [Company Name] like '%' + @search1 + '%')";
   SqlCommand xp = new SqlCommand(str, con);

   xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = RefNo.Text;
   xp.Parameters.Add("@search1", SqlDbType.NVarChar).Value = RefNo.Text;

   con.Open();
   xp.ExecuteNonQuery();
   SqlDataAdapter da = new SqlDataAdapter();

   da.SelectCommand = xp;
   DataSet ds = new DataSet();
   da.Fill(ds, "ITEM No#");
   Search.DataSource = ds;
   Search.DataBind();
   con.Close();        
}

[no name]

Что происходит, когда вы запускаете этот код? Вы получаете какие-нибудь ошибки? Я не верю, что это допустимый SQL.

Nomfundo Cindi

Он не отображает никаких ошибок, проблема в том, что я получаю ложные результаты

Nomfundo Cindi

Он не отображает никаких ошибок, но дает неправильные результаты

Bryian Tan

в запросе отсутствует оператор

@search + ' % '[название компании] должно быть @search + ' % ' или [название компании]

Nomfundo Cindi

У меня есть триада, которая все еще не работает

1 Ответов

Рейтинг:
1

CHill60

Если бы я это делал, то у меня был бы такой код:

protected void Search_Click(object sender, EventArgs e)
  {

      var constr = ConfigurationManager.ConnectionStrings["ConnectToDB"].ConnectionString;

      var sql = new StringBuilder();
      sql.Append("Select [ITEM No#], [Company Name], [Discipline Required], [Service Description], Institution, [Award Date]");
      sql.Append(" from PSP_Report ");

      using (var con = new SqlConnection(constr))
      {
          using (var xp = new SqlCommand())
          {
              xp.Connection = con;

              var andRequired = false;
              var whereAdded = false;

              AddASearchItem(ref whereAdded, ref andRequired, sql, Search1.Text, "[ITEM NO#]", 1, xp);
              AddASearchItem(ref whereAdded, ref andRequired, sql, Search2.Text, "[Company Name]", 2, xp);
              AddASearchItem(ref whereAdded, ref andRequired, sql, Search3.Text, "[Discipline Required]", 3, xp);

              xp.CommandText = sql.ToString();

              con.Open();

              var da = new SqlDataAdapter {SelectCommand = xp};

              var ds = new DataSet();
              da.Fill(ds);
              GridView1.DataSource = ds.Tables[0];
              GridView1.DataBind();
              con.Close();
          }
      }
  }

  protected void AddASearchItem(ref bool whereAdded, ref bool andRequired, StringBuilder s,
      string searchText, string colName, int item, SqlCommand cmd)
  {
      //Add a search item to the string builder determining whether or not the words 'WHERE' or 'AND'
      //need to be added. Add an appropriate parameter to the sql command.
      if (string.IsNullOrEmpty(searchText)) return;
      if (!whereAdded)
      {
          s.Append(" where ");
          whereAdded = true;
      }
      else
          if (andRequired) s.Append(" AND");
      s.Append(string.Format("  {0} LIKE @search{1}", colName,item));
      cmd.Parameters.AddWithValue("@search" + item.ToString(), "%" + searchText + "%");
      andRequired = true;
  }

Моменты, которые следует отметить:
1-я использовал StringBuilder для динамического построения текста команды sql. Это лучше, чем конкатенация строк (потому что строки неизменяемы)
2 - у меня есть небольшая функция, которая добавляет элементы поиска в SQL только в том случае, если в соответствующем текстовом поле поиска что-то есть.
3-мне нужно выяснить, нужно ли добавлять в SQL слова " Где " или "и".
4 - Если ни в одном из полей поиска ничего нет, то все записи будут возвращены


Nomfundo Cindi

Он находит только первое текстовое поле

CHill60

Я не понимаю вашего комментария

Nomfundo Cindi

@Chill60
Код, который вы опубликовали, работает без ошибок, но он ищет только одно текстовое поле

CHill60

Э...нет. Он ищет содержимое до 3 текстовых полей. Поиск, 2 и 3. Он строит Sql динамически в зависимости от содержимого трех текстовых полей. В отличие от многих, я проверил это перед тем, как опубликовать