2009-06-24 10 views
1

Je crée une application dans laquelle je souhaite afficher les lignes dans DataGridView en fonction des valeurs entrées par l'utilisateur dans la zone de texte.Remplissage des données pour DataGridView à partir de la base de données en fonction de la condition

Par exemple. Si l'utilisateur entre le nom du livre dans la zone de texte, tous les détails concernant ce livre doivent être affichés dans un DataGridView.

J'ai utilisé les codages suivants:

  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); 
      } 

Mais le code ci-dessus affiche toutes les lignes entrées dans la table. Je veux dire que les lignes ne sont pas retrivées en fonction de la condition.

Quelqu'un peut-il m'aider à trouver l'ensemble correct d'extrait de code utilisé pour récupérer des données en fonction de la condition?

S'il vous plaît Aidez-moi.

Merci d'avance.

Répondre

3

Vous vous ouvrez à l'injection SQL en acceptant directement les entrées de l'utilisateur, même si c'est un problème secondaire. Pourquoi appelez-vous objSqlDataAdapter.Update(objDataTable); dans cette section?

Bien que tout le reste semble bien que je voudrais essayer 2 choses:

  1. Supprimez l'appel objSqlDataAdapter.Update(objDataTable); - rien n'a été modifié, de sorte que ce qui est mis à jour? À ce stade, vous ne devez sélectionner que des données. Ceci modifie également la table quand elle est mise à jour, et la table agit comme source de données de BindingSource.

  2. Modifiez la commande select pour utiliser les paramètres et voir si cela fait une différence. Cette étape a l'avantage supplémentaire de prévenir l'injection SQL.

changer donc ceci:

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

à ceci:

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

SqlDataAdapter objSqlDataAdapter = new SqlDataAdapter(command); 
Questions connexes