Insert et objet

babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015 - 5 mai 2008 à 08:55
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 9 mai 2008 à 09:23
Bonjour,

Hypothèse : 
   - une table TBL_CLIENT : données es clients 
   - un objet "Client" qui permet (entre autre) de géré un client. Cet objet contient des méthodes et des propriétés (correspondantes aux différentes colonnes de ma table TBL_CLIENT)

Question:
Je voudrais implémenter une méthode "Client.Add" afin d'ajouter un nouveau client dans ma table TBL_CLIENT. Comment dois-je m'y prendre pour passer tous les champs de l'insert :
   1° Faire une structure qui sera en paramétre de ma méthode .Add ?
   2° Utiliser toutes les propriétés de l'objet "Client" que le programme appelant devra obligatoirement initialiser ?
   3° Passer toutes les champs de l'insert un a un en paramétre de ma méthode ".Add" ?
   4° Autre chose ?

MErci

DT

6 réponses

yassinebennani Messages postés 249 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 2 mai 2014
5 mai 2008 à 16:13
Je vais te proposer deux manières pour faire la chose mais il y en a plusieurs :

la première est de passer par une requête paramètrée comme ça montre cet article
 
la deuxième est de passer par une simple replace(), exemple :

req = "Insert into table_client (id, nom) values(@id,@nom)".Replace("@id",ObjetClient.ID.toString()).Replace("@nom", ObjetClient.Nom.toString());
_____________________________________________________________________
Yassine BENNANI - Ingénieur en génie logiciel & multimédia (Consultant SI)
0
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
5 mai 2008 à 17:21
j'ai du mal m'exprimer. Concerant la requete SQL, pas de souci. J' essaye de respecter la notion des 3 couches. Ma question concerné plus le passage de paramètre à la méthode qui se charge de faire l'insert
Explication dans le "source"

Methode 1 :
Client = new Client();
Client.numero = 123;
Client.nom = "eee";
Client.adresse = "aaa";
Client.Add();

Methode 2 :
Client = new Client();
Client.Add (numero, nom, adresse);
// ou numero, nom, adresse sont des variables

Methode 3:
StructClient structClient = new StructClient
structClient.numero = 123;
structClient.nom = "eee";
structClient.adresse= "aaaa";
Client = new Client();
Client.Add (structClient);

Qu'elle est la mieux, y en a t il d'autres ?

DT
0
yassinebennani Messages postés 249 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 2 mai 2014
5 mai 2008 à 22:37
D'aprés ce que je vois la méthode Add existe à l'intérieur da la classe Client donc ta ps respecté l'architecture 3 couche car là c'est une classe métier qui est client et qui se charge en plus d'accéder à la base de donnée.

En tous cas si la méthode Add existe à l'intérieur de la classe client donc y a aucun besoin de lui passer des paramètres car elle peut les avoir juste en utilisant le mot clé this.

Methode 1 :
Client = new Client();
Client.numero = 123;
Client.nom = "eee";
Client.adresse = "aaa";
Client.Add();

je préfère ps ni la deuxième ni la troisième prk?? et bien par ce que la troisième est plus lourde et la deuxième tu passe par des variables qui n'ont rien avoir avec ton objet Client cela veut dire que tu ajoute dans la table alors que ton objet n'a ps encors d'identité et à toi de voir.

_______________________________________________________________
Yassine BENNANI - Ingénieur en génie logiciel & multimédia (Consultant SI)
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
9 mai 2008 à 00:19
Salut,

"req = "Insert into table_client (id, nom) values(@id,@nom)".Replace("@id",ObjetClient.ID.toString()).Replace("@nom", ObjetClient.Nom.toString());"
Une requête semi paramétrée donc... ce truc est totalement à proscrire.

/*
coq
MVP Visual C#
CoqBlog
*/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yassinebennani Messages postés 249 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 2 mai 2014
9 mai 2008 à 01:44
pourquoi???

Les fins justifient les moyens_________________________________________________
Yassine BENNANI - Ingénieur en génie logiciel & multimédia (Consultant SI)
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
9 mai 2008 à 09:23
Ca ne résoud en rien le problème de formatage (même si probablement iunexistant ici, sauf peut être sur grandes valeurs de ID) et celui de l'injection SQL.
Autant écrire directement
req = String.Format("Insert into table_client (id, nom) values({0},{1})", ObjetClient.ID.ToString(), ObjetClient.Nom.ToString()); // A NE PAS FAIRE

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous