Gestion des requêtes paramétrées avec Databinding.Filter

Signaler
Messages postés
4
Date d'inscription
mercredi 9 septembre 2009
Statut
Membre
Dernière intervention
11 mars 2011
-
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
-
Salut,

SVP je travaille sur un projet et en mode déconnecté (le projet a déjà géré automatiquement les TableAdapter et les DataBinding).Mon souci c'est la gestion des requêtes paramétrées avec le DataBinding.
Auparavant j'utilisais ce code là dans l'évènement TextChanged
private void textBoxRecherche_TextChanged(object sender, EventArgs e)
{
this.medicamentBindingSource.Filter = "designation like '" + textBoxRecherche.Text + "%'";
}
Ca marche très bien mais le hic c'est qu'il est victime des injections sql.
Donc quand j'essaie de faire les requêtes paramétrées ca me donne ca
private void textBoxRecherche_TextChanged(object sender, EventArgs e)
{
medicamentTableAdapter.Adapter.SelectCommand.Parameters.Add("@designation", SqlDbType.VarChar, 80).Value = textBoxRecherche.Text + "%";
this.medicamentBindingSource.Filter = "designation LIKE @design";
}
Mais il me ramène comme erreur impossible de trouver la colonne [@design].
J'espère que j'ai été clair oh.Aidez moi SVP je prends toutes les propositions à moins que celles-ci me débarrassent des injections sql .

Merci bien et bonne journée

3 réponses

Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Salut,

je connais pas ton contexte particulier mais j'utilise les command parameters assez souvent. Première chose à voir :tu add un param que t'appelles @designation et que tu références par la suite dans ta requête par @design, c'est normal ? ^^
Messages postés
4
Date d'inscription
mercredi 9 septembre 2009
Statut
Membre
Dernière intervention
11 mars 2011

excuse frangin c'est une erreur dans mon projet voici ce que j'ai mis
private void textBoxRecherche_TextChanged(object sender, EventArgs e)
{
medicamentTableAdapter.Adapter.SelectCommand.Parameters.Add("@design", SqlDbType.VarChar, 80).Value = textBoxRecherche.Text + "%";
this.medicamentBindingSource.Filter = "designation LIKE @design";

}

Donc voilà j'ai rectifié mais c'est toujours la même erreur que le code me renvoie
Au fait dans cette zone là quand je saisis des lettres automatiquement mon datagrid affiche les noms des médicaments commençant par ce que je suis en train de taper et cela au fur et à mesure.Le medicamentBindingsource m'a été généré avec le medicamentTableAdapter.J'espere ke c'est un peu clair merci
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
TableAdapter, BindingSource ... c'est pas des trucs que j'utilise, quand je requête un SGBD je le fais en brut ;)

Quelques idées :
- ton SGBD s'attends à des param du type '?param' et non '@param' (c'est le cas de MySQL il me semble) mais ça m'étonnerait,
- BindingSource.Filter est un filtre de surface, il filtre APRES que la requête soit lancée, du coup le param n'a pas de sens pour lui (je penche plus pour celle-là).

Et sinon, si tu as peur des injections SQL tu peux te faire une petite fonction perso string SqlEncode(string) à la place de l'utilisation des command params ;)