Simplifier les requete sql

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 706 fois - Téléchargée 19 fois

Contenu du snippet

Je trouve que faire des requete dans le code est très ennuyeux, j'au fait alors un petit code qui permet de faire plus simplement et plus joliement (je trouve des requete sql) avant de les envoyer au SGBD...

Source / Exemple :


using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;

    public class DbAccess : Hashtable
    {
        public DbAccess()
        {
            Requete rq;
            // j'ai pris un exemple simpliste
            #region "Requetes Personne"
            rq = new Requete("getPersonnes");
            rq.Valeur = "SELECT * FROM Personne";
            this.Add(rq.Name, rq);

            rq = new Requete("addPersonne");
            rq.Valeur = "INSERT INTO Personne" +
                        "(Nom, Prenom)" +
                        "VALUES " +
                        "(@Nom, @Prenom)";
            this.Add(rq.Name, rq);

            rq = new Requete("updPersonne");
            rq.Valeur = "UPDATE Personne SET " +
                        "Nom = @Nom, " +
                        "Prenom = @Prenom " +
                        "WHERE id = @id";
            this.Add(rq.Name, rq);

            rq = new Requete("delPersonne");
            rq.Valeur = "DELETE FROM Prenom WHERE id = @id";
            this.Add(rq.Name, rq);
            #endregion
        }
    }
    public class Requete
    {
        #region "Propriété"
        internal string _Name;
        public string Name
        {
            get { return _Name; }
        }
        internal string _Valeur;
        public string Valeur
        {
            get { return _Valeur; }
            set { _Valeur = value; }
        }
        #endregion
        #region "Constructeurs"
        public Requete(string name)
        {
            this._Name = name;
        }
        #endregion
        #region "Méthodes"
        public void AddParam(string champ, string valeur)
        {
            this._Valeur.Replace(champ, valeur);
        }
        public void AddParam(string champ, int valeur)
        {
            this._Valeur.Replace(champ, valeur.ToString());
        }
        public void AddParam(string champ, double valeur)
        {
            this._Valeur.Replace(champ, "'" + valeur.ToString() + "'");
        }
        public void AddParam(string champ, DateTime valeur)
        {
            string stringDate = valeur.Year.ToString() + "-" & valeur.Month.ToString() & "-" + valeur.Day.ToString() + " " & valeur.Hour.ToString() + ":" & valeur.Minute.ToString() + ":" & valeur.Second.ToString();
            this._Valeur.Replace(champ, "'" + stringDate + "'");
        }
        #endregion
    }

// comment l'utiliser..?

//à declarer au tt début du programme
DbAccess _LeDbAccess = new DbAccess ()

//à utiliser a chaque fois qu'on accede à la base a l'aide d'une requete
Requete rq = (Requete)_LeDbAccess["addPersonne"];
rq.AddParam("@Nom", leNom );
rq.AddParam("@Prenom", lePrenom );
//rq.Valeur est notre requete...
SqlCommand sql = new SqlCommand(rq.Valeur);
....

Conclusion :


laissez moi des critiques... Je ferai en sorte de faire mieux...
A+.

A voir également

Ajouter un commentaire Commentaires
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

admettons que j'ai une table utilisateurs (login varchar, password varchar, isadmin bit) et une table pleindedonnees

pour selectionner des données de données j'ai la requête :

select * from pleindedonnees
where (maclef = @maclef)

je remplace @maclef par "'" + valeur + "'" valeur
jusque là tout va bien, c'est ce que tu fait.

maintenant dans valeur je met
"'toto') GO insert into utilisateurs ('hacker', 'hacker', true) --"

la requête passée sera :

select * from pleindedonnees
where (maclef = 'toto') GO insert into utilisateurs ('hacker', 'hacker', true) --)

et je n'aurais plus à me connecter à l'application qu'en tant que 'hacker' avec le mot de passe 'hacker'.

Conclusion : suis les recommendation de seb et bidou.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
remarque comme ca :
string stringDate = valeur.Year.ToString() + "-" & valeur.Month.ToString() & "-" + valeur.Day.ToString() + " " & valeur.Hour.ToString() + ":" & valeur.Minute.ToString() + ":" & valeur.Second.ToString();
this._Valeur.Replace(champ, "'" + stringDate + "'");

c'est pas bon en C#... l'opérateur de concaténation de chaine est le + pas le & !
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
C'est effectivement pas l'pied...
Ca donne au moins l'exemple de ce qu'il ne faut pas faire !
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
mouaip... ça simplifie le travail du hacker...
NE JAMAIS FAIRE DE REQUETE COMME CECI !
Toujours utiliser les DbParameters.

Enfin, si vraiment tu veux simplifier l'utilisation des requêtes passe plutot par le mapping par attribut ! (http://www.csharpfr.com/codes/MAPPING-ATTRIBUTS-EXEMPLE-UTILISATION_34726.aspx)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.