2009-06-24 2 views
1

Я создаю приложение, в котором я хочу отображать строки в DataGridView на основе значений, введенных пользователем в текстовое поле.Заполнение значений DataGridView из базы данных на основе условия

Для примера. Если пользователь вводит BookName в текстовое поле, все данные, касающиеся этой книги, должны отображаться в DataGridView.

Я использовал следующие кодировки:

  SqlConnection objSqlConnection = new SqlConnection(); 
      string connectionStringSettings = "Data Source =.; Initial Catalog = LibrarySystemManagement;Integrated Security = SSPI"; 
      private void btnSearch_Click(object sender, EventArgs e) 
      try 
      { 
       objSqlConnection.ConnectionString = connectionStringSettings; 
       objSqlConnection.Open(); 

       if ((txtBookName.Text != "") || (txtCategory.Text != "")) 
       { 

        SqlDataAdapter objSqlDataAdapter = new SqlDataAdapter("select * from LIBRARYBOOKDETAILS where Title = '"+txtTitle.Text+"'", objSqlConnection); 
        SqlCommandBuilder objSqlCommandBuilder = new SqlCommandBuilder(objSqlDataAdapter); 
        DataTable objDataTable = new DataTable(); 
        objSqlDataAdapter.Fill(objDataTable); 
        BindingSource objBindingSource = new BindingSource(); 
        objBindingSource.DataSource = objDataTable; 
        dataGridView1.DataSource = objBindingSource; 
        objSqlDataAdapter.Update(objDataTable); 
        objSqlConnection.Close(); 
       } 
      } 
      catch (Exception e1) 
      { 
       MessageBox.Show(e1.Message + e1.Source); 
      } 

Но приведенный выше код отображает все строки, введенные в таблице. Я имею в виду, что строки не извлекаются на основе условия.

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

Пожалуйста, помогите мне.

Заранее спасибо.

ответ

3

Вы открываете себе SQL-инъекцию, напрямую принимая ввод пользователя, хотя это побочный вопрос. Почему вы звоните objSqlDataAdapter.Update(objDataTable); в этом разделе?

Хотя все остальное выглядит хорошо, я хотел бы попробовать 2 вещи:

  1. Снимите objSqlDataAdapter.Update(objDataTable); вызов - ничего не было изменено, так что обновляется? На данный момент вы должны выбирать только данные. Это также изменяет таблицу, когда она обновляется, и таблица действует как источник данных BindingSource.

  2. Измените команду выбора, чтобы использовать параметры, и посмотрите, не изменилось ли это. Этот шаг имеет дополнительное преимущество для предотвращения внедрения SQL.

Так это изменить:

SqlDataAdapter objSqlDataAdapter = new SqlDataAdapter("select * from LIBRARYBOOKDETAILS where Title = '"+txtTitle.Text+"'", objSqlConnection); 

Для этого:

SqlCommand command = new SqlCommand("select * from LIBRARYBOOKDETAILS where Title = @Title", objSqlConnection); 
command.Parameters.AddWithValue("@Title", txtTitle.Text); 

SqlDataAdapter objSqlDataAdapter = new SqlDataAdapter(command); 
Смежные вопросы