ADI@345 Ответов: 1

Невозможно получить запись о множественном выборе списка.


i have a listbox and gridview,if i made multple selection of item of listbox , data of last item show only ..i want to  show record of all selected item of listbox


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

protected void searchname_date()
{

    if (ListBox1.Items.Count > 0)
    {
        for (int i = 0; i < ListBox1.Items.Count; i++)
        {
            if (ListBox1.Items[i].Selected)
            {
                string selectedItem = ListBox1.Items[i].Text;

                SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
                string Query = "SELECT *  FROM [dsr_data] where (date_time between '" + TextBox1.Text + "'  and    '" + TextBox4.Text + "') And  session_name='" + selectedItem + "'";
                DataTable dtAdmin = new DataTable();
                SqlDataAdapter da;
                da = new SqlDataAdapter(Query, cnn);
                da.Fill(dtAdmin);
                if (dtAdmin.Rows.Count > 0)
                {
                    GVmydsr.DataSource = dtAdmin;
                    GVmydsr.DataBind();

                }
                else
                {
                    GVmydsr.DataSource = null;
                    GVmydsr.DataBind();
                }


            }

        }
    }
}

1 Ответов

Рейтинг:
5

Karthik_Mahalingam

пробовать

protected void searchname_date()
      {
          List<string> lstSelectedItems = new List<string>();

          if (ListBox1.Items.Count > 0)
              for (int i = 0; i < ListBox1.Items.Count; i++)
                  if (ListBox1.Items[i].Selected)
                      lstSelectedItems.Add(ListBox1.Items[i].Text);


          string inQuery = string.Join("','", lstSelectedItems);
          inQuery = "'" + inQuery + "'";

          SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
          string Query = "SELECT *  FROM [dsr_data] where (date_time between @from  and    @to ) And  session_name in ({0})";
          Query = string.Format(Query, inQuery);
          SqlCommand cmd = new SqlCommand(Query, cnn);
          cmd.Parameters.AddWithValue("@from", TextBox1.Text);
          cmd.Parameters.AddWithValue("@to", TextBox4.Text);

          DataTable dtAdmin = new DataTable();
          SqlDataAdapter da;
          da = new SqlDataAdapter(Query, cnn);
          da.Fill(dtAdmin);
          if (dtAdmin.Rows.Count > 0)
              GVmydsr.DataSource = dtAdmin;
          else
              GVmydsr.DataSource = null;
          GVmydsr.DataBind();


      }



Примечание:Форматирование строки sql запроса таково уязвимый к SQL-инъекция[^] атаки
всегда использовать Параметризованные запросы для предотвращения атак SQL-инъекций в SQL Server[^]


ADI@345

все еще сталкиваясь с той же проблемой, показывается только последняя запись элемента списка

Karthik_Mahalingam

какую ценность вы получаете в "inQuery "

ADI@345

охраняемых недействительными searchname_date()
{
Список<строка> У lstSelectedItems = новый список<строка&ГТ;();


if (ListBox1.Предметы.Count > 0)
{
for (int i = 0; i < ListBox1.Предметы.Граф; i++)
{
if (ListBox1.Элементы[я].Выбранный)
{
lstSelectedItems.Добавить(Список Listbox1.Пункты[i].текст);

string inQuery = строка.Join (" ' ,'", lstSelectedItems);
inQuery = "'" + inQuery + "'";

SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].Параметр connectionString);
строка запроса = "выбрать * из [dsr_data], где (дата_время период с '" + текстовое поле textbox1.Текст + "' и '" + TextBox4.Текст + "') и session_name='" + inQuery + "'";
Строка запроса.Формат(запрос, запрос);
DataTable dtAdmin = новый DataTable();
SqlDataAdapter da;
da = новый SqlDataAdapter(запрос, cnn);
da.Fill(dtAdmin);
если (dtAdmin.Строк.Count > 0)
{
GVmydsr.Источник данных = dtAdmin;
Гвмыдср.Привязку();

}
еще
{
GVmydsr.Источник данных = значение null;
Гвмыдср.Привязку();
}


}

}
}
}



ОШИБКА :-
Deepali-это одно из имен элемента списка.
Неправильный синтаксис рядом с "Дипали".
Описание: необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения Об Исключении: System.Данных.Sqlclient как.Ситуацию sqlexception: неправильный синтаксис рядом с 'же Дипали Ханне'.

Karthik_Mahalingam

protected void searchname_date()
        {
            List<string> lstSelectedItems = new List<string>();
 
            if (ListBox1.Items.Count > 0)
                for (int i = 0; i < ListBox1.Items.Count; i++)
                    if (ListBox1.Items[i].Selected)
                        lstSelectedItems.Add(ListBox1.Items[i].Text);
 

            string inQuery = string.Join("','", lstSelectedItems);
            inQuery = "'" + inQuery + "'";
 
            SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            string Query = "SELECT *  FROM [dsr_data] where (date_time between @from  and    @to ) And  session_name in ({0})";
            Query = string.Format(Query, inQuery);
            SqlCommand cmd = new SqlCommand(Query, cnn);
            cmd.Parameters.AddWithValue("@from", TextBox1.Text);
            cmd.Parameters.AddWithValue("@to", TextBox4.Text);
 
            DataTable dtAdmin = new DataTable();
            SqlDataAdapter da;
            da = new SqlDataAdapter(Query, cnn);
            da.Fill(dtAdmin);
            if (dtAdmin.Rows.Count > 0)
                GVmydsr.DataSource = dtAdmin;
            else
                GVmydsr.DataSource = null;
            GVmydsr.DataBind();
 

        }

ADI@345

сэр , на самом деле что происходит , когда мы выбираем два элемента из списка, он прекрасно работает с одним элементом, но с двумя элементами
Выберите * из [dsr_data], где date_time между '11/1/2017' и '11/30/2017' и session_name='abc','efg'
этот запрос не дает никаких выходных данных в sql server..

Karthik_Mahalingam

   SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            string Query = "SELECT *  FROM [dsr_data] where (date_time between @from  and    @to ) And  session_name in ({0})";
            Query = string.Format(Query, inQuery);
            SqlCommand cmd = new SqlCommand(Query, cnn);
            cmd.Parameters.AddWithValue("@from", TextBox1.Text);
            cmd.Parameters.AddWithValue("@to", TextBox4.Text);

Karthik_Mahalingam

Оператор SQL IN[^]

ADI@345

Да, я забыл использовать в предложении ..теперь это работает.. спасибо

Karthik_Mahalingam

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