IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème requête préparée avec connections ODBC [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 59
    Points
    59
    Par défaut Problème requête préparée avec connections ODBC
    Hello tout le monde

    J'ai un petit soucis avec les connexions préparées.

    En effet, je fais un petit travail en C#avec une base de données Firebird.

    Cette connexion se fait via la méthode ODBC.

    Pour me connecter, j'y arrive sans trop de problèmes.

    Cette base de données possède les champs suivants:

    Id, Titre, Auteur, Genre, Achat, Prix, Disponible.

    Quand je veux effectuer une requête préparée pour connaitre que les livres dont le genre est roman,

    J'effectue ceci actuellement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ConnectionString = @"Dsn=ContactSer;Driver={Firebird/InterBase(r) driver};dbname=chemin de ma BDD;charset=NONE;uid=SYSDBA";
                cn = new OdbcConnection(ConnectionString);
     
                cmd = new OdbcCommand();
                cmd.Connection = cn;
                cn.Open();
     
                string data = "BD";
                cmd.CommandText = "SELECT GENRE FROM BIBLIO WHERE GENRE LIKE '%"+data+"%'";
     
                cmd.ExecuteNonQuery();
                OdbcDataReader reader = cmd.ExecuteReader();
    Et cela fonctionne nickel... hormis que je n'ai pas encore mis de moyen de contrôle de sécurité...

    Hors j'ai vu qu'avec une requête préparée, on peut écrire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    ConnectionString = @"Dsn=ContactSer;Driver={Firebird/InterBase(r) driver};dbname=Chemin de ma BDD;charset=NONE;uid=SYSDBA";
                cn = new OdbcConnection(ConnectionString);
     
                cmd = new OdbcCommand();
                cmd.Connection = cn;
                cn.Open();
     
                cmd.Parameters.Add(new OdbcParameter("@auteur", OdbcType.VarChar, 15));
                cmd.Parameters["@auteur"].Value = "BD";
     
                cmd.CommandText = "SELECT GENRE FROM BIBLIO WHERE GENRE LIKE '%@auteur%'";
     
    //cmd.CommandText = "SELECT GENRE FROM BIBLIO WHERE GENRE LIKE %@auteur%";
    //MessageBox.Show(cmd.CommandText);
    Et là, ça ne va plus

    On peut me dire ou se trouve mon erreur ?

    MErci pour votre aide :-)

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Il ne faut pas mettre le paramètre entre guillemets, sinon il n'est pas interprété comme un paramètre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.CommandText = "SELECT GENRE FROM BIBLIO WHERE GENRE LIKE @auteur || '%'";

  3. #3
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    J'aurai procédé ainsi, mais ça doit revenir au même non?

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    ConnectionString = @"Dsn=ContactSer;Driver={Firebird/InterBase(r) driver};dbname=chemin de ma BDD;charset=NONE;uid=SYSDBA";
                cn = new OdbcConnection(ConnectionString);
     
    using (OdbcCommand cmd = new OdbcCommand("SELECT GENRE FROM BIBLIO WHERE GENRE LIKE %?%", con)) {
             cmd.Parameters.AddWithValue("@auteur", "BD");
     
             // Execution puis lecture....
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 59
    Points
    59
    Par défaut
    hop, j'ai résolu mon problème.

    voilà ce que j'ai fait et cà fonctionne :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ConnectionString = @"Dsn=ContactSer;Driver={Firebird/InterBase(r) driver};dbname=chemin de ma BDD;charset=NONE;uid=SYSDBA";
                cn = new OdbcConnection(ConnectionString);
     
                cmd = new OdbcCommand();
                cmd.Connection = cn;
                cn.Open();
     
     
                string data = "B";
                cmd.CommandText = @"SELECT GENRE FROM BIBLIO WHERE GENRE LIKE ?";
     
                cmd.Parameters.Add(new OdbcParameter("@auteur", OdbcType.VarChar, 15));
                cmd.Parameters["@auteur"].Value = "%"+data+"%";
                MessageBox.Show(cmd.CommandText);
                cmd.ExecuteNonQuery();
                OdbcDataReader reader = cmd.ExecuteReader();
    Merci pour toutes vos réponses :-)

    Maintenant, je dois pouvoir récupérer les données pour les ajouter dans un datagridview.

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Hmmm, attention avec ta solution, j'ai peur que les % soient transformés en %% pour les échapper, et qu'on recherche effectivement la chaîne exacte "%acteur%" et non les chaines qui contiennent "acteur".

    Tu dis que ça marche, et honnêtement ça me surprends. Évite, à mon avis, d'une version à l'autre du drivers ODBC (qui semble être buggé) tu risques d'avoir un comportement différent.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 59
    Points
    59
    Par défaut
    Eh bien je viens de vérifier ce que tu m'as dit... et ca marche nickel ce que j'ai fait avec une autre version odbc de firebird :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème de requête préparée avec PDO
    Par fab56 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/01/2013, 22h06
  2. Réponses: 8
    Dernier message: 14/09/2011, 12h08
  3. Réponses: 2
    Dernier message: 07/02/2008, 11h45
  4. [WD8] Requêtes paramétrées avec accès odbc direct
    Par devalender dans le forum WinDev
    Réponses: 5
    Dernier message: 20/12/2005, 12h25
  5. [connexion Mysql] problème de connexion avec l'odbc
    Par DarkAngelus dans le forum Administration
    Réponses: 2
    Dernier message: 13/10/2005, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo