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

MS SQL Server Discussion :

[SQL Server 2008 & C#] Datareader imbriques


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 86
    Par défaut [SQL Server 2008 & C#] Datareader imbriques
    Bonjour,

    J'ai la table suivante (unique table de ma base de donnee sql server) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Name  Description     Type   Min   Max    Feature   Storage   FileName
    -----  -----------  ----   ---  ---   -------   -------   --------
    ACM     untruc        int     0     50     bla       imported  un.xml
    ACM     untruc        int     5     50     bla       imported  deux.xml
    ACM     untruc        int     0     50     bla       imported  trois.xml
    ACM     untruc2       int     7     50     bla       imported  quatre.xml
    ACM     untruc2       int     0     35     bla       imported  cinque.xml
    Je souhaiterais recuperer les FileName des lignes possedant les memes caracteristiques de la colonne Description a la collonne Feature (comprise)

    J'ai d'abord essaye avec les datareader en selectionnant d'abord les lignes distinctes aue je souhaite (SqlCommand "val") et ensuite pour chaque ligne de mon reader je recherche tous les FileName possedant cette ligne (SqlCommand "select") et je traite le resultat :

    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
    34
     
     
    SqlCommand val = new SqlCommand("SELECT DISTINCT Description, Type, Min, Max, Feature FROM Variables WHERE Name = @Name", form1.con);
    val.Parameters.Add(new SqlParameter("@Name", SqlDbType.VarChar, 400));
    val.Parameters["@Name"].Value = name;
    rdr = val.ExecuteReader();
     
    while (rdr.Read())
    {
    descr = rdr[0].ToString();
    type = rdr[1].ToString();
    min = rdr[2].ToString();
    max = rdr[3].ToString();
    feat = rdr[4].ToString();
    SqlDataReader rdr2 = null;
    SqlCommand selec = new SqlCommand("SELECT FileName FROM Variables WHERE Description = @desc AND Type = @type AND Min = @min AND Max = @max AND Feature = @feat AND Name = @Name", form1.con);
    selec.Parameters.Add(new SqlParameter("@desc", SqlDbType.VarChar, 400));
    selec.Parameters["@desc"].Value = desc;
    selec.Parameters.Add(new SqlParameter("@type", SqlDbType.VarChar, 400));
    selec.Parameters["@type"].Value = type;
    selec.Parameters.Add(new SqlParameter("@min", SqlDbType.VarChar, 400));
    selec.Parameters["@min"].Value = min;
    selec.Parameters.Add(new SqlParameter("@max", SqlDbType.VarChar, 400));
    selec.Parameters["@max"].Value = max;
    selec.Parameters.Add(new SqlParameter("@feat", SqlDbType.VarChar, 400));
    selec.Parameters["@feat"].Value = feat;
    rdr2 = selec.ExecuteReader();
    while (rdr2.Read()) // erreur 
    {
         // Je traite mes FileName
    }
    rdr2.Close();
    }
    rdr.Close();
    Mais bien sur j'ai une erreur au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rdr2 = selec.ExecuteReader();
    J'ai vu plusieurs sujets traitant de cela mais je n'ai pas vraiment compris les solutions ... ou alors elles ne marchent pas.

    Merci d'avance,

    Mathieu

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 86
    Par défaut
    En fait j'ai trouve une solution !

    Je ne sais pas si c'aest la meilleure et la plus optimal mais elle marche.

    J'ai tout simplement ouvert une seconde connection que j'affecte a mon datareader rdr2.

    Si jamais il existe de mailleures solutions, je suis preneur !

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Une simple requête SQL suffit...

    Comme vous n'avez pas respecté la charte de postage, voici le script DDL employé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE T_MATABLE_TBL
    (TBL_NAME         VARCHAR(32),
     TBL_DESCRIPTION  VARCHAR(256),
     TBL_TYPE         VARCHAR(16),
     TBL_MIN          INT,
     TBL_MAX          INT,
     TBL_FEATURE      VARCHAR(32),
     TBL_STORAGE      VARCHAR(32),
     TBL_FILENAME     VARCHAR(128))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO T_MATABLE_TBL
    VALUES 
    ('ACM', 'untruc', 'int', 0, 50, 'bla', 'imported', 'un.xml'),
    ('ACM', 'untruc', 'int', 5, 50, 'bla', 'imported', 'deux.xml'),
    ('ACM', 'untruc', 'int', 0, 50, 'bla', 'imported', 'trois.xml'),
    ('ACM', 'untruc2','int', 7, 50, 'bla', 'imported', 'quatre.xml'),
    ('ACM', 'untruc2', 'int', 0, 35, 'bla', 'imported', 'cinque.xml');
    et maintenant la requête :

    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
    WITH 
    T0 AS
    (SELECT *, ROW_NUMBER() OVER(PARTITION BY TBL_DESCRIPTION, TBL_TYPE, TBL_MIN, TBL_MAX, TBL_FEATURE 
                                 ORDER BY TBL_FILENAME) AS N
     FROM T_MATABLE_TBL),
    T1 AS
    (SELECT N, TBL_DESCRIPTION, TBL_TYPE, TBL_MIN, TBL_MAX, TBL_FEATURE, CAST(TBL_FILENAME AS VARCHAR(max)) AS ALL_FILENAME, 1 AS NB
     FROM   T0
     UNION ALL
     SELECT T0.N, T0.TBL_DESCRIPTION, T0.TBL_TYPE, T0.TBL_MIN, T0.TBL_MAX, T0.TBL_FEATURE, T1.ALL_FILENAME +', ' + T0.TBL_FILENAME, T1.NB + 1
     FROM   T0
            INNER JOIN T1
                  ON T1.N = T0.N + 1
                     AND T0.TBL_DESCRIPTION = T1.TBL_DESCRIPTION
                     AND T0.TBL_TYPE = T1.TBL_TYPE
                     AND T0.TBL_MIN = T1.TBL_MIN
                     AND T0.TBL_MAX = T1.TBL_MAX
                     AND T0.TBL_FEATURE = T1.TBL_FEATURE),
    T2 AS
    (SELECT TBL_DESCRIPTION, TBL_TYPE, TBL_MIN, TBL_MAX, TBL_FEATURE, ALL_FILENAME,
            ROW_NUMBER() OVER(PARTITION BY TBL_DESCRIPTION, TBL_TYPE, TBL_MIN, TBL_MAX, TBL_FEATURE 
                              ORDER BY NB DESC) AS NN 
     FROM   T1)                                          
    SELECT *
    FROM   T2
    WHERE  NN = 1
    Au passage, beaucoup d'horreur :
    • nom de table avec un S
    • nom de colonne étant des mots réservés de SQL : Name, Description, Type, Min, Max, FileName...


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. SQL Server 2008 : les nouveautés . . .
    Par SQLpro dans le forum MS SQL Server
    Réponses: 51
    Dernier message: 12/05/2010, 16h10
  2. Problème lors de l'installation de SQL SERVER 2008
    Par MedSabri dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 19/03/2008, 11h55
  3. type geography dans sql server 2008
    Par skandarghorbel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/02/2008, 15h28
  4. Erreur Installation SQL Server 2008 Katmai
    Par jowsuket dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 25/01/2008, 11h40
  5. Date officielle de la sortie de SQL Server 2008
    Par snoopy69 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/09/2007, 18h29

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