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

Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Dernière intervention
1 février 2013
- 1 févr. 2013 à 12:40 - Dernière réponse :
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
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
14301
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
20 novembre 2018
1 févr. 2013 à 19:55
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
---

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
14301
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
20 novembre 2018
1 févr. 2013 à 13:42
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
Dernière intervention
1 février 2013
1 févr. 2013 à 14:59
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
Dernière intervention
1 février 2013
1 févr. 2013 à 22:00
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.