Auteur de questions
Faire une classe pour les requetes?

Question
-
Bonjour,Voici le code de mon dataBase.csusing 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 faitMais maintenant j'ai une question,ici j'ai des requetes statique, surtout pour testé que sa fonctionne (
). 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
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
-
Salut,ViviJ'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 ; excepteda 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
-
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.
-
Salut,J'ai corrigé le if, c'était en effet les ( et ) manquantes.Maintenant pour mes requêtes, alors voici comment jle vois:class: requeteSQLselectClientselectObjectupdateClientupdateOBjectselectClientByAdresse/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 valeurdatabase affiche résultat dans grille, ou ficheEst-ce que je suis dans le juste?Meilleures salutations !
-
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: requeteSQLstatic string selectClientstatic selectObjectstatic updateClientstatic updateOBjectstatic selectClientByAdresse/note/Rte/etc.static select objetBy...chacune de ces méthodes te retourne la requête sous forme d'une stringpuis dans un boutondataBase 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 ficheTu 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. -
Salut,
super merci, je vais ecrire mes 200 requetes
Edit:
J'ai une petite couille: (enfin... on se comprend
)
{
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;}
}