IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[C#/SqlDataReader] Comment récupérer l'alias ou le nom par defaut d'un champs ?


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut [C#/SqlDataReader] Comment récupérer l'alias ou le nom par defaut d'un champs ?
    Bonjour,
    Le titre n'est pas très très explicite mais le problème est relativement simple.
    J'ai une requete de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Select num as numéro, id as identifiant, tel from matable"
    Je lance un ExetureReader sur ma requete, récupère le SqlDataReader et maintenant je fais des lecture dessus.
    J'ai alors besoin de créer un tableau avec pour chaque colonne
    ColumnName = num ou id ou tel
    et Caption : numéro, identifiant ou tel (quand il n'y a pas d'alias il doit récupérer quand même).
    Est ce qu'il est possible de récupérer ces informations à partir du DataReader ?
    Je sais qu'en faisant un dtReader.GetName(<num_colonne>) j'aurais l'alias (numéro ou identifiant ou tel) mais je ne sais aps comment récupérer les num ou id ???

    Si ce n'est pas possible, il faut que je fasse une procédure à part qui va s'occuper du découpage de la string de ma requete.

    Merci pour vos infos

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Bon j'avoue que je ne comprends pas non plus ton souci
    Pour moi la recupération des entête de champs ne pose aucun souci ainsi que des données
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    DataTable dt2 = newDataTable();
    SqlDataReader reader = null;
    DataRow dr = null;
    object[] values;
    try
    {
      this.sqlCommand1.Connection.Open();
      reader = this.sqlCommand1.ExecuteReader();
      for (int i = 0; i < reader.FieldCount; i++)
        dt2.Columns.Add(reader.GetName(i));
      values = newobject[reader.FieldCount];
      while (reader.Read())
      {
         reader.GetValues(values);
         dr = dt2.NewRow();
         dr.ItemArray = values;
         dt2.Rows.Add(dr);
      }
      this.View2.DataSource = dt2;
    }
    catch (Exception ex)
    {
       MessageBox.Show(ex.ToString());
    }
    finally
    {
       if (reader != null)
         reader.Close();
       if(this.sqlCommand1.Connection.State != ConnectionState.Closed)
        this.sqlCommand1.Connection.Close();
    }
    

  3. #3
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    J'aime bien ta méthode, déjà plus propre que celle que j'utilise.
    Par contre par rapport à mon problème, je souhaite renseigner 2 choses : le Nom de la colonne et son titre ce qui est diférrent.
    J'appelle une colonne par son nom mais c'est son titre qui s'affiche.
    pour ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select num as numéro from matable
    je veux pourvoir avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    maColonne.ColumName = "num"
    maColonne.Caption = "numéro"
    Est ce que l'explction est légerement meilleur ?

    Merci

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Mmmh ok donc ceci impose que tu le traite avant l'envoi de la requête car nécessairemment le retour de la requêtre ( truc AS machin) imposera machin. le reader n'aura que machin comme info retournée. Le plus simple serait donc de traiter la requête en amont pour predeterminer la structure de la table qui accueillera le resultat ce qui d'aileurs ne necessitera ensuite plus cette partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i = 0; i < reader.FieldCount; i++)
       dt2.Columns.Add(reader.GetName(i));

  5. #5
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Dommage, je pensais qu'il y aurait pu avoir une genre de sauvegare de ce genre de chose dans le reader.

    Merci pour les précisions.

  6. #6
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par Jinroh77
    Dommage, je pensais qu'il y aurait pu avoir une genre de sauvegare de ce genre de chose dans le reader.

    Merci pour les précisions.
    Arf mea culpa, je n'ai pas testé mais je crois que j'ai été un peu vite en besogne
    Je viens de me rappeler cette méthode : SqlDataReader.GetSchemaTable
    et en relisant ce lien je crois bien qu'il est possible de fouiller ce schéma pour retrouver BaseColumnName
    Citation Envoyé par MSDN
    Nom de la colonne dans le magasin de données. Il peut être différent du nom de colonne retourné dans la colonne ColumnName si un alias a été utilisé. Valeur null si le nom de la colonne de base ne peut pas être déterminé ou si la colonne du jeu de lignes est dérivée d'une colonne du magasin de données, et non identique à celle-ci. La valeur par défaut de cette colonne est une valeur null.

Discussions similaires

  1. Comment récupérer un alias de colonne Oracle
    Par theophanie dans le forum SGBD
    Réponses: 1
    Dernier message: 20/05/2011, 17h06
  2. Réponses: 2
    Dernier message: 26/12/2006, 09h39
  3. Réponses: 2
    Dernier message: 08/10/2006, 11h44
  4. [c#] comment récupérer le namespace d'une DLL par réflection?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/07/2006, 13h20
  5. Réponses: 2
    Dernier message: 11/07/2006, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo