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 :

Requête paramétré en c# utilisation d'objets


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut Requête paramétré en c# utilisation d'objets
    Bonjours a tous,

    J'essaie de créer une fonction qui liste les données d'une table.

    Je souhaiterai utiliser les réquête parametre pour plus de sécurité mais je ne sais pas comment utilisez ma class dans cette même fonction.

    je vous montre comment je fais actuellement :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     public static List<Client> ListerClient(string id, string ORDERBY = "nom")
            {
                string requete = "";
                if (!String.IsNullOrEmpty(id))
                {
                    requete = "SELECT  * FROM Client WHERE id = " + id + " ORDER BY " + ORDERBY;
                }
                else
                {
                    requete = "SELECT  * FROM Client";
                }
                List<Client> listClient = new List<Client>();
                SqlConnection cx = new SqlConnection(CHAINECONNEXION);
                SqlCommand cmd = new SqlCommand(requete, cx);
                cmd.Connection = cx;
                cx.Open();
                SqlDataReader dReader;
                dReader = cmd.ExecuteReader();
     
                int idCli;
                string nom;
                string adresse;
                string cp;
                string ville;
     
                while (dReader.Read())
                {
                    idCli = dReader.GetInt32(0);
                    nom = dReader.GetString(1);
                    adresse = dReader.GetString(2);
                    cp = dReader.GetString(3);
                    ville = dReader.GetString(4);
                    Client newClient = new Client(idCli,nom, adresse, cp, ville);
                    listClient.Add(newClient);
                }
                cx.Close();
                dReader.Close();
                return listArtisan;
            }
    PS : Code de la fonction alléger pour plus de clarté

    Comme vous pouvez le voir, j' utilise le constructeur de la classe Client puis ajoute le nouvelle objet a ma liste.

    Puis je retourne cette liste.

    Comment réaliser la même chose mais en utilisant les requête paramétrer ?

    Merci a vous pour votre aide.
    Life myLife = new Life ("eat","sleep","code");

  2. #2
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    Points : 110
    Points
    110
    Par défaut
    Salut, tout simplement :

    Remplacer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete = "SELECT  * FROM Client WHERE id = " + id + " ORDER BY " + ORDERBY;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    requete = "SELECT  * FROM Client WHERE id = @ID ORDER BY " + ORDERBY;
    Ensuite en dessous de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand cmd = new SqlCommand(requete, cx);
    Ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmd.Parameters("@ID",SqlDbType.???).Value = id;
    Bien sur remplacer les "???" par le type de donnée voulu.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Merci brnf1 ça marche très bien.

    Juste il manqué le add dans l'ajout de paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd.Parameters.Add("@ID",SqlDbType.???).Value = id;
    Avec une requete simple ça marche bien mais si je decide de passe en parametre une variable qui peut avoir un type différent, ma fonction me retourne plus rien :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public static List<Client> ListerClient(string colonne, string valeurColonne)
            {
                string requete = "";
                if (!String.IsNullOrEmpty(colonne))
                {
                    requete = "SELECT  * FROM Client WHERE @colonne = @valeurColonne";
                }
                else
                {
                    requete = "SELECT  * FROM Client";
                }
                List<Client> listClient = new List<Client>();
                SqlConnection cx = new SqlConnection(CHAINECONNEXION);
                SqlCommand cmd = new SqlCommand(requete, cx);
                cmd.Parameters.Add("@colonne", SqlDbType.VarChar).Value = colonne;
                cmd.Parameters.Add("@valeurColonne", SqlDbType.VarChar).Value = valeurColonne;
     
                cmd.Connection = cx;
                cx.Open();
                SqlDataReader dReader;
                dReader = cmd.ExecuteReader();
     
                int idCli;
                string nom;
                string adresse;
                string cp;
                string ville;
     
                while (dReader.Read())
                {
                    idCli = dReader.GetInt32(0);
                    nom = dReader.GetString(1);
                    adresse = dReader.GetString(2);
                    cp = dReader.GetString(3);
                    ville = dReader.GetString(4);
                    Client newClient = new Client(idCli,nom, adresse, cp, ville);
                    listClient.Add(newClient);
                }
                cx.Close();
                dReader.Close();
                return listClient;
            }
    Lors de l’appel de la fonction des fois j'aurai par exemple pour "valeurColonne " un int ou un varchar.

    j'ai éssayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     cmd.Parameters.AddWithValue("@valeurColonne", valeurColonne);
    je pensé que ça récupérer le type de manière implicite, mais le résultat est toujours vide, même pas une erreur pour m'aider.

    Merci par avance pour votre aide.
    Life myLife = new Life ("eat","sleep","code");

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Des fois je me dit, qu'il faut vraiment faire une pause.

    Pourquoi passer des paramètre pour le nom des colonnes, de simple variable ne suffirai pas.

    Voila le maux de tout mes soucis, le nom des colonnes sont des variables et les valeurs des paramètre.

    N'es ce pas logique.

    Encore merci brnf1 de m'avoir ouvert la voie.

    Life myLife = new Life ("eat","sleep","code");

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/01/2010, 14h29
  2. Utilisation de requêtes paramétrées dans Talend.
    Par BI-Ali dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 17/06/2009, 13h49
  3. Réponses: 4
    Dernier message: 30/03/2008, 21h56
  4. Réponses: 7
    Dernier message: 11/10/2006, 13h35
  5. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50

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