Member 14185275 Ответов: 1

Есть ли какой-либо запрос для поиска в базе данных значения, которое было заменено другим значением


Я создал две таблицы в базе данных sql и соединил их с помощью joins.В этой таблице есть таблица Products, в этой колонке есть P_active с char(1) и значением по умолчанию как 'Y'.Во время отображения в режиме таблицы, столбец состояние показывает 'Y- но я хочу показать ... Active- вместо того, чтобы ... Y'.Я сделал это, но проблема заключается в том,что во время поиска, в текстовом поле, если я ввожу 'Active- или любое другое письмо a/c/t/i/v/e и нажмите на кнопку поиск, записи с 'Active- статус должен быть показан, но, к сожалению, я не получаю никаких записей, найденных, если я ввожу какое-либо письмо, кроме ... YИтак, как достичь требуемой функциональности с помощью запроса.

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

КОД CS:

protected void GridView1_RowDataBound(object sender,GridViewRowEventArgs e)
{
    DataRowView drv = (DataRowView)e.Row.DataItem;
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
        if (drv["P_active"].ToString() == "Y")
            e.Row.Cells[4].Text = "Active";           
       }
}

protected void btnsearch_Click(object sender, EventArgs e)
{
    if (ddlsearch.SelectedItem.Text == "Product Name")
    {
        GridView1.DataSource = bll.Search("P_name", txtsearch.Text);
    }                   
    else if (ddlsearch.SelectedItem.Text == "Status")
    {            
            GridView1.DataSource = bll.Search("P_active", txtsearch.Text);                                   
    }
    GridView1.DataBind(); 
}


БАЛАНС:
public DataTable Search(string option, string val)
    {
        return dll.search(option, val);
    }


ДАЛМАТИНЕЦ:
public DataTable search(string searchBy, string searchVal)
    {
        SqlCommand cmd = new SqlCommand("spsearchp", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@SearchBy", searchBy);
        cmd.Parameters.AddWithValue("@SearchVal", searchVal);
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        return dt;
    }

хранимая процедура:

CREATE PROC [dbo].[spsearchp]
@SearchBy   varchar(50),
@SearchVal  varchar(50)
AS 
BEGIN
IF @SearchBy = 'P_name'
BEGIN
select * from Products LEFT JOIN Category ON Products.PCid= Category.cid where P_name like '%' + @SearchVal + '%'
END
ELSE IF @SearchBy = 'P_active'
BEGIN
select * from Products LEFT JOIN Category ON Products.PCid= Category.cid WHERE P_active like '%' + @SearchVal + '%'
END
ELSE
BEGIN
select * from Products LEFT JOIN Category ON Products.PCid= Category.cid
END
END

Gerry Schmitz

Вы создаете вторичный индекс со всеми значениями, которые вы хотите разрешить в "Y".

1 Ответов

Рейтинг:
8

MadMyche

Простой способ состоял бы в том, чтобы изменить эту процедуру для части, имеющей дело с Активный поиск; возможно, что-то подобное сработает и для вас

-- prior code
ELSE IF @SearchBy = 'P_active'
BEGIN
-- select * from Products LEFT JOIN Category ON Products.PCid= Category.cid WHERE P_active like '%' + @SearchVal + '%'
  DECLARE @Active CHAR(1) = 'N'
  IF (@SearchVal = 'active') SET @Active = 'Y'
  SELECT *
  FROM   Products  p
  LEFT JOIN Category c ON p.PCid= c.cid
  WHERE  p.P_active= @Active
END
-- continue with previous code


Member 14185275

Спасибо Вам за быстрый ответ.Я проверю с ним и обновлю.Еще раз спасибо тебе.

Member 14185275

Спасибо умыче, это сработало отлично, и большое спасибо у СУ за ваш ответ.

MadMyche

Добро пожаловать