Insert et objet

Signaler
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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

Messages postés
249
Date d'inscription
samedi 13 octobre 2007
Statut
Membre
Dernière intervention
2 mai 2014

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)
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

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
Messages postés
249
Date d'inscription
samedi 13 octobre 2007
Statut
Membre
Dernière intervention
2 mai 2014

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)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
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
*/
Messages postés
249
Date d'inscription
samedi 13 octobre 2007
Statut
Membre
Dernière intervention
2 mai 2014

pourquoi???

Les fins justifient les moyens_________________________________________________
Yassine BENNANI - Ingénieur en génie logiciel & multimédia (Consultant SI)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
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
*/