none
Faire une classe pour les requetes? RRS feed

  • Question

  • Bonjour,

    Voici le code de mon dataBase.cs

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using MySQLDriverCS;

    namespace courtageBeta1
    {
        class dataBase
        {
            private DataTable _dataTable;
            private MySQLConnection _dBConn;
            public DataTable myDataTable
            {
                get { return _dataTable; }
                set { _dataTable = value; }
            }
            private String _server;
            private String _login;
            private String _password;
            public dataBase()
            {
            }
            public dataBase(String server, String login, String password)
            {
                _server = server;
                _login = login;
                _password = password;
            }
            public bool selectQuery(String request)
            {
                //Cr‚ation de la commande avec la connextion (attention ConnetDB doit avoir ‚t‚ appel‚!
                _dBConn = new MySQLConnection(new MySQLConnectionString(_server, _login, _password, "").AsString);
                MySQLCommand myCommand = new MySQLCommand(request, _dBConn);
                MySQLDataAdapter dadVideoCollection = new MySQLDataAdapter(myCommand);
                myDataTable = new DataTable("MonDataTable");
                dadVideoCollection.Fill(myDataTable);
                _dBConn.Open();
                _dBConn.Close();
                //DataColumn col = new DataColumn("Supprimer", System.Type.GetType("System.Boolean"));
                //col.DefaultValue = false;
                //myDataTable.Columns.Add(col);
                return true;
            }

            public bool otherQuery(string request)
            {
                _dBConn = new MySQLConnection(new MySQLConnectionString(_server, _login, _password, "").AsString);
                MySQLCommand myCommand = new MySQLCommand(request, _dBConn);
                myCommand.Connection.Open();
                myCommand.ExecuteNonQuery();
                _dBConn.Close();
                return true;
            }
        }
    }

    et voici ma forme principale:

            private void loadClient()
            {
                dataBase mydatabase = new dataBase("localhost", "immo", "root");
                bool connectionStatus = mydatabase.selectQuery("SELECT * FROM xdb_contact;");

                dataGridView1.DataSource = mydatabase.myDataTable;
                dataGridView1.Refresh();
            }

            private void loadObject()
            {
                dataBase mydatabase = new dataBase("localhost", "immo", "root");
                bool connectionStatus = mydatabase.selectQuery("SELECT * FROM xdb_object;");

                dataGridView1.DataSource = mydatabase.myDataTable;
                dataGridView1.Refresh();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                loadClient();
            }


    Voilà, Vous aurez surement compris ce que ça fait Wink

    Mais maintenant j'ai une question,

    ici j'ai des requetes statique, surtout pour testé que sa fonctionne (Wink). Mais selon ou l'on clique la requête doit être différente. Comment faire donc pour que cette requete "statique" passe à "dynamique"?


    Meilleures salutations, et bonne appétit Smile
    mercredi 23 juillet 2008 09:26

Toutes les réponses

  • Ca doit être parce que j'ai faim que je comprends pas bien

     

    En fait tu as déjà créé le requêtage en dynamique puisque ta requête est passée en paramètre pour exécution.

     

    Tu peux détailler un peu ce que tu veux dire par "dynamique" ? (éventuellement avec un exemple de requête)

     

    Bon appétit à toi aussi

     

    mercredi 23 juillet 2008 09:50
  • Salut,


    Vivi Stick out tongue

    J'ai une fonction: 

            private void loadClient()
            {
                dataBase mydatabase = new dataBase("localhost", "immo", "root");
                bool connectionStatus = mydatabase.selectQuery("SELECT xdb_contact.company, " + 
                                   "xdb_contact.firstname, " + 
                                   "xdb_contact.lastname, " +
                                   "xdb_addressType.designation addressType, " +
                                   "xdb_address.* " +
                                        "FROM `xdb_contact` " +
                                        "LEFT JOIN xdb_contact_address ON xdb_contact.id = xdb_contact_address.contact " +
                                        "LEFT JOIN xdb_address ON xdb_contact_address.address = xdb_address.id " +
                                        "LEFT JOIN xdb_addressType ON xdb_contact_address.addressType = xdb_addressType.id");

                dataGridView1.DataSource = mydatabase.myDataTable;
                dataGridView1.Refresh();
            }

    Mais comme tu peux le voir, elle contient deja sa requete.

    Et si maintenant je veux utiliser cette meme fonction, mais avec une requête différente? Comment faire?

    Est-ce mieux de créé une classe avec toute les requetes possibles du programmes et d'appeller la bonne a chaque fois?

    comment ferais-tu toi?


    Edit: J'en profite pour te poser une question sur c#
    Voici mon code:
    private void btnSrcClient_Click(object sender, EventArgs e)
            {
                if (txtSrcClient.Text != "") and (rdbName.Checked == false) || (rdbAdress.Checked == false) || (rdbPhone.Checked == false) || (rdbPhone.Checked == false)
                {
                    if (rdbName.Checked)
                    {
                        dataBase mydatabase = new dataBase("localhost", "immo", "root");
                        bool connectionStatus = mydatabase.selectQuery("SELECT * from xdb_contact where lastname='" + txtSrcClient.Text + "'");

                        dataGridView1.DataSource = mydatabase.myDataTable;
                        dataGridView1.Refresh();
                    }

                    if (rdbAdress.Checked)
                    {
                        dataBase mydatabase = new dataBase("localhost", "immo", "root");
                        bool connectionStatus = mydatabase.selectQuery("SELECT * from xdb_contact where adress='" + txtSrcClient.Text + "'");

                        dataGridView1.DataSource = mydatabase.myDataTable;
                        dataGridView1.Refresh();
                    }

                    if (rdbNote.Checked)
                    {
                        dataBase mydatabase = new dataBase("localhost", "immo", "root");
                        bool connectionStatus = mydatabase.selectQuery("SELECT * from xdb_contact where note='" + txtSrcClient.Text + "'");

                        dataGridView1.DataSource = mydatabase.myDataTable;
                        dataGridView1.Refresh();
                    }

                    if (rdbPhone.Checked)
                    {
                        dataBase mydatabase = new dataBase("localhost", "immo", "root");
                        bool connectionStatus = mydatabase.selectQuery("SELECT * from xdb_contact where tel='" + txtSrcClient.Text + "'");

                        dataGridView1.DataSource = mydatabase.myDataTable;
                        dataGridView1.Refresh();
                    }
                }
                else
                {
                    MessageBox.Show("Tous les champs doivent être remplis", "Erreur de recherche", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }


    dont voici les erreurs:
    Error 1 ;  excepted
    a la fin de la ligne du if:
    if (txtSrcClient.Text != "") and (rdbName.Checked == false) || (rdbAdress.Checked == false) || (rdbPhone.Checked == false) || (rdbPhone.Checked == false)

    Error 2 : il n'aime pas le terme "else"

    Error 3 : denouveau la virgule, il me la place après le else -> else;

    pourquoi? comment changé?


    Meilleure salutation

    mercredi 23 juillet 2008 10:48
  • bon ma réponse d'hier soir s'est perdue

     

    Je te disais que tu pouvais le faire en xml si tu te sentais assez à l'aise mais que sinon une classe ça pourrait le faire aussi. Une classe avec des "méthodes statiques" qui retourne une requête genre come Color ou tu fait Color.Red Color.Yellow, ..... pour obtenir une couleur prédéfinie

     

    Sinon pour ton if commence par corriger la première erreur avant de t'attaquer aux autres. Met entre () l'ensemble de la condition ça aidera peut être.

    jeudi 24 juillet 2008 07:16
  • Salut,

    J'ai corrigé le if, c'était en effet les ( et ) manquantes.


    Maintenant pour mes requêtes, alors voici comment jle vois:


    class: requeteSQL

    selectClient
    selectObject
    updateClient
    updateOBject
    selectClientByAdresse/note/Rte/etc.
    select objetBy...

    etc.


    puis dans un bouton :

    dataBase mydataTable = new database(...)
    requete mesRequete = new requete()

    mesrequete.selectClient("laRequete")

    dataBase récupère valeur

    database affiche résultat dans grille, ou fiche


    Est-ce que je suis dans le juste?


    Meilleures salutations !
    jeudi 24 juillet 2008 07:44
  • Presque

     

    Non c'est bon mais on va rajouter une petite nouveauté à tes connaissances  les méthodes statiques

     

    Tu vas juste mettre ton code sous la forme:

    public class: requeteSQL

    static string selectClient
    static selectObject
    static updateClient
    static updateOBject
    static selectClientByAdresse/note/Rte/etc.
    static select objetBy...
     
    chacune de ces méthodes te retourne la requête sous forme d'une string
     
    puis dans un bouton
    dataBase mydataTable = new database(...)
     // requete mesRequete = new requete() Y a pas besoin de ça !! (je le laisse pour te montrer qu'il faut l'enlever )

     

    Database.select(requeteSQL.selectClientByAdresse(... paramètres ...));


    database affiche résultat dans grille, ou fiche
     
     
    Tu peux même aller plus loin et faire en sorte que la méthode se charge aussi de faire la requête si tu veux (à ce moment là tu peux par exemple mettre une instance de database sous la forme d'un paramètre et faire un truc du genre)
     
    dataBase mydataTable = new database(...)
     
    mydataTable =  requeteSQL.selectClientByAdresse(mydataTable, ... paramètres ...);
     
    Bon c'est assez schématique pour l'instant mais c'est juste pour le principe.
    jeudi 24 juillet 2008 13:36
  • Salut,

     

    super merci, je vais ecrire mes 200 requetes Big Smile

     

     

    Edit:

     

    J'ai une petite couille: (enfin... on se comprend Wink)

     

    private void btnDelClient_Click(object sender, EventArgs e)

    {

    dataBase myRequest = new dataBase("localhost", "immo", "root");

    myRequest.selectQuery(requeteSQL.deleteClient("DELETE FROM `xdb_contact` WHERE `xdb_contact`.`id` = " dataGridView.Je.sais.plus.comment.recuperer.l.id.en.cours + ";"));

    }

     

     

    mon

     

    requeteSQL. me propose ma méthode string, juste un referenceEquals.

     

    Vooici le code:

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    namespace WindowsFormsApplication2

    {

    class requeteSQL

    {

    static string selectClientList;

    static string selectOneClient;

    static string updateClient;

    static string deleteClient;

    }

    }

    vendredi 25 juillet 2008 07:55