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

ADO.NET Discussion :

Alternative date reader dans un autre datareader. DataSource


Sujet :

ADO.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut Alternative date reader dans un autre datareader. DataSource
    Bonjour à tous, alors je suis assez débutant en ADO.NET et j'utilise principalement des datareader...

    Mais apparemment, il est impossible d'imbriquer 2 DataReader ?

    Donc j'ai cherché une alternative pour stocker les données. Et je suis tombé sur le dataSet ?

    J'ai fait de la recherche mais j'ai tjs une erreur. A mon avis vous allez vite trouver , enfin j'espère

    Alors voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     SqlCommand cmd = new SqlCommand("SELECT Title, PlanID  FROM dbo.Evaluation Where  Step = '" + step + "'", conn);
                    SqlDataAdapter da = new SqlDataAdapter();
                    da.SelectCommand = cmd;
                    DataSet ds = new DataSet("Plans");
     
                    da.Fill(ds);
    En fait je pense que cette partie là est bonne, Je bloque plus pour accéder aux données ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.Write(ds.Tables["Plans"].Rows[0]["Title"].ToString());
    j'ai à peu près tout testé pour accéder, j'vois pas...

    Merci de bien vouloir m'éclairer là dessus !

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Alors, une petite remarque pour commencer.
    Regarde ce tutoriel est met le en application. Il concerne les requêtes paramétrées et te permettra de ne plus faire de requêtes à base de concaténations de string dangereuses et sources d'erreur.
    Ca ne coute pas plus cher et t'évitera bien des ennuis

    Pourquoi passes-tu par un Dataset ici ? Un DataReader conviendrait très bien (au vu du code que tu donnes).

    Enfin, tu ne pourras pas accéder à la table "plans" de ton dataSet puisque c'est le dataSet lui-même auquel tu as donné le Name "plan".

    Détaille un peu ton code pour que nous puissions t'en dire plus stp.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    J'utilise les paramètres quand ce sont de longues requêtes. Ici elles sont pas trop longues , enfin je trouve.

    Je veux juste accéder aux valeurs Title et PlanID.

    C'est pas possible ?

    Je sais qu'avec juste la partie de code que j'ai mise je peux utiliser un datareader mais ici je veux juste savoir une utiliser un dataset.

    je pense pas que ça soit nécéssaire de mettre mon bout de code imbriquant mes 2 datareader mais bon je vous le met en option

    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
     
     
     SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["connectionString"]);
                conn.Open();
                try
                {
                    SqlDataReader dr2;
                    SqlCommand cmd = new SqlCommand("SELECT Title,PlanID  FROM EvaluationListPlansFiche  Where Step = '" + step + "'", conn);
     
                    SqlDataReader dr = cmd.ExecuteReader();
                     while (dr.Read())
                     {
                         plan = new Label();
                         plan.Text = dr["Title"].ToString();
                         PlaceHolder1.Controls.Add(plan);
                         PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
     
                         SqlCommand cmd2 = new SqlCommand("SELECT Title,DescriptionSec  FROM dbo.EvaluationSection Where PlanID = '" + Int32.Parse(dr["PlanID"].ToString()) + "'", conn);
                         dr2 = cmd2.ExecuteReader();
                         while (dr2.Read())
                         {   
     
                         }
                         dr2.Close();
                         dr2 = null;
                     }
                     dr.Close();

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Utiliser des requêtes paramétrées n'est pas seulement utile pour la lisibilité des requêtes. Elles le sont surtout pour sécuriser ton application car avec tes concaténations, tu ne te protèges pas contre les injections SQL.

    Pour ce qui est de ton DataSet, tu n'as pas nécessairement besoin d'imbriquer deux dataReaders :
    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
    DataSet ds = new DataSet();
    DataTable dt = new DataTable("Plans");
    SqlCommand cmd = new SqlCommand("SELECT Title,PlanID  FROM EvaluationListPlansFiche  Where Step = '" + step + "'", conn);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
    ds.Tables.Add(dt);
    SqlCommand cmd2 = null;
    foreach( DataRow row in dt.Rows ){
         cmd2 = new SqlCommand("SELECT Title,DescriptionSec  FROM dbo.EvaluationSection Where PlanID = '" + row["PlanID"].ToString() + "'", conn);
    dr2 = cmd2.ExecuteReader();
    while (dr2.Read())
    {   
     
    }
    dr2.Close();
    dr2 = null;
    }
    A indenter et adapter car j'ai écrit le code ici et ne l'ai pas testé.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par calagan99 Voir le message
    Utiliser des requêtes paramétrées n'est pas seulement utile pour la lisibilité des requêtes. Elles le sont surtout pour sécuriser ton application car avec tes concaténations, tu ne te protèges pas contre les injections SQL.

    Pour ce qui est de ton DataSet, tu n'as pas nécessairement besoin d'imbriquer deux dataReaders :
    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
    DataSet ds = new DataSet();
    DataTable dt = new DataTable("Plans");
    SqlCommand cmd = new SqlCommand("SELECT Title,PlanID  FROM EvaluationListPlansFiche  Where Step = '" + step + "'", conn);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
    ds.Tables.Add(dt);
    SqlCommand cmd2 = null;
    foreach( DataRow row in dt.Rows ){
         cmd2 = new SqlCommand("SELECT Title,DescriptionSec  FROM dbo.EvaluationSection Where PlanID = '" + row["PlanID"].ToString() + "'", conn);
    dr2 = cmd2.ExecuteReader();
    while (dr2.Read())
    {   
     
    }
    dr2.Close();
    dr2 = null;
    }
    A indenter et adapter car j'ai écrit le code ici et ne l'ai pas testé.
    Ok merci , je vais tester ça !

    J'étais pas au courant pour les injections sql *-) je vais changer ça

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Citation Envoyé par eleve_prog Voir le message
    J'étais pas au courant pour les injections sql *-) je vais changer ça
    Là, tu me fais plaisir

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par calagan99 Voir le message
    Là, tu me fais plaisir
    Tout marche impec'

    Tchu's

  8. #8
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Utiliser des requêtes paramétrées n'est pas seulement utile pour la lisibilité des requêtes. Elles le sont surtout pour sécuriser ton application car avec tes concaténations, tu ne te protèges pas contre les injections SQL.
    Cela permet également de meilleures performances côté SGBD du fait de la ré-utilisabilité des plans d’exécution de la requête.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 03/03/2014, 16h16
  2. Réponses: 7
    Dernier message: 18/06/2012, 15h53
  3. Un DataReader dans un autre DataReader
    Par Juju54350 dans le forum C#
    Réponses: 9
    Dernier message: 16/12/2010, 15h58
  4. afficher une date contenue dans une autre table..
    Par gide_x dans le forum Requêtes
    Réponses: 0
    Dernier message: 23/08/2008, 23h36
  5. Inserer une date d'une table dans une autre table
    Par petitetre dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/04/2007, 20h16

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