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

  1. #1
    Membre chevronné 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 : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    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
    Alexandre Chemla - Consultant MS BI chez Masao

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    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();
    }
    
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre chevronné 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 : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    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
    Alexandre Chemla - Consultant MS BI chez Masao

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    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));
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre chevronné 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 : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    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.
    Alexandre Chemla - Consultant MS BI chez Masao

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    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.
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre chevronné 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 : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    On fait sauter le RESOLU et on continue à réflechir...
    Je me disais bien qu'il y avait une histoire de Schéma quelque part, il ne reste plus qu'à apprendre à l'utiliser car apparement il renvoit un DataTable, il faut extraire les données souhaitées.

    Merci
    Alexandre Chemla - Consultant MS BI chez Masao

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Jinroh77
    On fait sauter le RESOLU et on continue à réflechir...
    Je me disais bien qu'il y avait une histoire de Schéma quelque part, il ne reste plus qu'à apprendre à l'utiliser car apparement il renvoit un DataTable, il faut extraire les données souhaitées.

    Merci
    je n'ai pas trop le temps aujourd'hui mais il te suffit de tester en l'affichant d'abord pour comprendre sa construction, tu devrais ainsi retrouver la démarche à faire via la valeur de la colonne BaseColumnName
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  9. #9
    Membre chevronné 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 : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Merci de ton soutien.
    Je me lance dans les test et l'apprentissage de l'utilisation de cette belle choooose.
    Alexandre Chemla - Consultant MS BI chez Masao

  10. #10
    Membre chevronné 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 : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    J'ai fait quelques premiers essais avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    clRequete cRequete = new clRequete("select idBaseCotisation as toto
     from xc_appelcotisation where idAppelCotisation = 5");
     
    SqlDataReader drReader = cRequete.QueryRequete();
    DataTable dtTable = drReader.GetSchemaTable();
     
    dataGridView1.DataSource = dtTable;
    cRequete.CloseConnection();
    Mais le idBaseCotisation n'apparait nul part dans la table
    Dans 'BaseColumnName" c'est toujours le toto qui est là.
    Alexandre Chemla - Consultant MS BI chez Masao

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Jinroh77
    J'ai fait quelques premiers essais avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    clRequete cRequete = new clRequete("select idBaseCotisation as toto
     from xc_appelcotisation where idAppelCotisation = 5");
     
    SqlDataReader drReader = cRequete.QueryRequete();
    DataTable dtTable = drReader.GetSchemaTable();
     
    dataGridView1.DataSource = dtTable;
    cRequete.CloseConnection();
    Mais le idBaseCotisation n'apparait nul part dans la table
    Dans 'BaseColumnName" c'est toujours le toto qui est là.
    Ne pouvant toujours pas tester par moi-même je te soumet l'idée aussi de transferer cette requête côté BDD par uen simple vue dans un premier temps et simplement récuperer le resultat directement à partir de la vue (select* from mavue) juste pour voir si le as côté BDD va aussi masquer le nom du champs réel au Datareader. Car dans ce cas il faudra donc bien accepter de se résoudre à cette situation concernant la manipulation des alias
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  12. #12
    Membre chevronné 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 : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Désolé, je n'avais pas vu ta réponse.
    En créant une vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT idAppelCotisation AS toto FROM     sysadm.xc_appelcotisation
    Ensuite je récupère mon DataReader et je regarde mon tableau. mais aucune apparition de mon idAppelCotisation
    C'est mal docteur ?
    Alexandre Chemla - Consultant MS BI chez Masao

  13. #13
    Membre chevronné 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 : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    On abandonne cette méthode ?
    Alexandre Chemla - Consultant MS BI chez Masao

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