Récupérer une valeur d'un SqlDataReader [Résolu]

Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
- - Dernière réponse : EmacLi
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
- 1 févr. 2013 à 22:00
Bonjour à tous,

J'ai deux tables Adresses et Clients.
Un client peut avoir deux adresses et une adresse peut être utilisé par plusieurs clients (c'est pas top mais c'est un exemple) :

CREATE TABLE Adresses
(
Adr_Id int NOT NULL,
Adr_Rue varchar(255),
....
PRIMARY KEY(Adr_Id),
);

CREATE TABLE Clients
(
Cli_Id int NOT NULL,
Cli_Adr_Id1 int,
Cli_Adr_Id2 int,
....
PRIMARY KEY(Cli_Id),
);

ALTER TABLE Clients WITH CHECK ADD CONSTRAINT FK_Clients_Adresses1 FOREIGN KEY(Cli_Adr_Id1) REFERENCES Adresses(Adr_Id);
ALTER TABLE Clients CHECK CONSTRAINT FK_Clients_Adresses1;
ALTER TABLE Clients WITH CHECK ADD CONSTRAINT FK_Clients_Adresses2 FOREIGN KEY(Cli_Adr_Id2) REFERENCES Adresses(Adr_Id);
ALTER TABLE Clients CHECK CONSTRAINT FK_Clients_Adresses2;


Je voudrais en une requête récupérer le client et ses éventuelles adresses, je fais donc ceci :

SELECT C.*, A1.*, A2.* FROM Clients C
INNER JOIN Adresses A1 ON A1.Adr_Id = C.Cli_Adr_Id1
INNER JOIN Adresses A2 ON A2.Adr_Id = C.Cli_Adr_Id2
WHERE C.Cli_Id = @id;


Mon problème c'est que je voudrais, via mon SqlDataReader, récupérer les valeurs de l'adresse 1 et l'adresse 2 sauf que les colonnes retournés portent le même nom (ex:"Adr_Id").
Je suis obligé de lire mon SqlDataReader via l'index (reader[5]).

Comment puis je lire mon SqlDataReader en utilisant le nom de la colonne (reader["Adr_Id"]) ?
Il y a t'il un moyen d'utiliser l'alias de la table (reader["A1.Adr_Id"]) ?

Merci à tous pour vos réponses ;)
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
14456
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2019
130
3
Merci
Bonjour,

Ben, si tu as déjà testé d’appeler le champ avec son nom complet (A1.Adr_Id), il te reste la possibilité d'utiliser des Alias :
SELECT A1.Adr_Id As A1Adr_Id, A2.Adr_Id As A2Adr_Id...

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
14456
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2019
130
0
Merci
Bonjour,

Tu peux peut être voir avec http://msdn.microsoft.com/fr-fr/library/system.data.sqlclient.sqldatareader.getschematable.aspx
Comme ça, tu pourras peut être connaitre aussi le nom de la table.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Commenter la réponse de NHenry
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
0
Merci
Hélas non, le schéma de mon SqlDataReader ne me donne pas cette information :(
Commenter la réponse de EmacLi
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
0
Merci
Oui je suppose que je n'ai plus trop le choix.

Je voulais trouver une solution qui m'aurait éviter d'énumérer tous les champs de ma table dans ma requête.

Merci quand même ;)
Commenter la réponse de EmacLi