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

Signaler
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
-
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
-
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 ;)

4 réponses

Messages postés
14676
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
143
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
---
Messages postés
14676
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
143
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
---
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
1
Hélas non, le schéma de mon SqlDataReader ne me donne pas cette information :(
Messages postés
165
Date d'inscription
jeudi 3 novembre 2005
Statut
Membre
Dernière intervention
1 février 2013
1
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 ;)