none
Lancer deux DataReader RRS feed

  • Question

  • Bonjour,

     

    J'ai une page aspx dans laquelle je lance deux DataReader l'un à la suite de l'autre.

    Le premier fonctionne parfaitement et s'affiche dans une table.

    Le deuxième plante : l'affichage de l'exception donne "System.EventArgs".

     

    Est-ce qqn a une explication ?

     

    Merci.

    jeudi 10 juillet 2008 09:35

Réponses

  • Bonjour,

     

    Je pense avoir une idée sur l'erreur : le DataReader étant un lecteur vers l'avant ligne par ligne, lorsqu'il arrive "en bas" du fichier (fin de fichier)

    Tout à fait, il n'est pas possible de repartir en arrière car le DataReader exploite le résultat d'une requête en avant uniquement...Il vous faudra rééxecuter la requête si nécessaire pour repartir depuis le début !

     

    Le détail de l'exception affichée avec e.ToString( ) donne

    Code Snippet

    System.EventArgs

    Ceci n'est pas l'erreur de l'exception..

    Vous devez confondre la variable "e" entre le paramètre de l'exception (du bloc catch) et l'un des paramètres de la méthode auquel vous appelez la méthode e.ToString().

     

    Est-il possible de voir le code complet de la méthode ?

     

    Cordialement

     

     

     

    vendredi 11 juillet 2008 20:03
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Peut-on voir en détail l'exception qui est généré ?

    Pouvez vous montrer votre code ASP .NET ?

     

    Cordialement

     

    jeudi 10 juillet 2008 20:28
    Modérateur
  • Le code est (extrait)

     

    Code Snippet

    Try
       
                    cmd = cn.CreateCommand()
                    cmd2 = cn.CreateCommand()
       
                    cmd.CommandText="SELECT * FROM "& societe &"_ec WHERE CT_NUM='"& num &"' AND YEAR(JM_DATE)='"& YEAR(Now) &"' AND EC_SENS=0"
                    cmd2.CommandText="SELECT * FROM "& societe &"_ec WHERE CT_NUM='"& num &"' AND YEAR(JM_DATE)='"& YEAR(Now) &"' AND EC_SENS=1"
       
                    rdr = cmd.ExecuteReader()
       
                    en_tete = New TableRow()
                    header_cell_00 = New TableHeaderCell()
                    header_cell_00.Text = "Date"
                    header_cell_00.CssClass = "en_tete0"
                    en_tete.Cells.Add(header_cell_00)
                    header_cell_01 = New TableHeaderCell()
                    header_cell_01.Text = "Intitulé"
                    header_cell_01.CssClass = "en_tete0"
                    en_tete.Cells.Add(header_cell_01)
                    header_cell_02 = New TableHeaderCell()
                    header_cell_02.Text = "Montant"
                    header_cell_02.CssClass = "en_tete"
                    en_tete.Cells.Add(header_cell_02)
                    ma_table.Rows.Add(en_tete)
       
                    Do While (rdr.Read())
       
                        obj_ligne = New TableRow()
                        obj_cell_00 = New TableCell()
                        jour=DATEADD("D",rdr("EC_JOUR"),CDATE(rdr("JM_DATE")))
                        obj_cell_00.Text = jour
                        obj_cell_00.HorizontalAlign = HorizontalAlign.Center
                        obj_ligne.Cells.Add(obj_cell_00)
                        obj_cell_01 = New TableCell()
                        obj_cell_01.Text = rdr("EC_INTITULE")
                        obj_cell_01.HorizontalAlign = HorizontalAlign.Left
                        obj_ligne.Cells.Add(obj_cell_01)
                        obj_cell_02 = New TableCell()
                        obj_cell_02.Text = FormatNumber(rdr("EC_MONTANT"))
                        obj_cell_02.HorizontalAlign = HorizontalAlign.Right
                        obj_cell_02.CssClass = "corps"
                        obj_ligne.Cells.Add(obj_cell_02)
                        ma_table.Rows.Add(obj_ligne)
                        total_debit+=rdr("EC_MONTANT")
       
                    Loop
       
                    obj_ligne_2 = New TableRow()
                    obj_cell_03 = New TableCell()
                    obj_cell_03.Text = " "
                    obj_ligne_2.Cells.Add(obj_cell_03)
                    obj_cell_04 = New TableCell()
                    obj_cell_04.Text = " "
                    obj_ligne_2.Cells.Add(obj_cell_04)
                    obj_cell_05 = New TableCell()
                    obj_cell_05.Text = FormatNumber(total_debit)
                    obj_cell_05.Font.Bold = True
                    obj_cell_05.HorizontalAlign = HorizontalAlign.Right
                    obj_cell_05.CssClass = "pied"
                    obj_ligne_2.Cells.Add(obj_cell_05)
                    ma_table.Rows.Add(obj_ligne_2)
       
       
                    rdr2 = cmd2.ExecuteReader()
       
                    en_tete2 = New TableRow()
                    header_cell_03 = New TableHeaderCell()
                    header_cell_03.Text = "Date"
                    header_cell_03.CssClass = "en_tete0"
                    en_tete2.Cells.Add(header_cell_03)
                    header_cell_04 = New TableHeaderCell()
                    header_cell_04.Text = "Intitulé"
                    header_cell_04.CssClass = "en_tete0"
                    en_tete2.Cells.Add(header_cell_04)
                    header_cell_05 = New TableHeaderCell()
                    header_cell_05.Text = "Montant"
                    header_cell_05.CssClass = "en_tete"
                    en_tete2.Cells.Add(header_cell_05)
                    ma_table2.Rows.Add(en_tete2)
       
                    Do While (rdr2.Read())
       
                        obj_ligne_3 = New TableRow()
                        obj_cell_06 = New TableCell()
                        jour=DATEADD("D",rdr("EC_JOUR"),CDATE(rdr("JM_DATE")))
                        obj_cell_06.Text = jour
                        obj_cell_06.HorizontalAlign = HorizontalAlign.Center
                        obj_ligne_3.Cells.Add(obj_cell_06)
                        obj_cell_07 = New TableCell()
                        obj_cell_07.Text = rdr("EC_INTITULE")
                        obj_cell_07.HorizontalAlign = HorizontalAlign.Left
                        obj_ligne_3.Cells.Add(obj_cell_07)
                        obj_cell_08 = New TableCell()
                        obj_cell_08.Text = FormatNumber(rdr("EC_MONTANT"))
                        obj_cell_08.HorizontalAlign = HorizontalAlign.Right
                        obj_cell_08.CssClass = "corps"
                        obj_ligne_3.Cells.Add(obj_cell_08)
                        ma_table2.Rows.Add(obj_ligne_3)
                        total_credit+=rdr("EC_MONTANT")
       
                    Loop
       
                    obj_ligne_4 = New TableRow()
                    obj_cell_09 = New TableCell()
                    obj_cell_09.Text = " "
                    obj_ligne_4.Cells.Add(obj_cell_09)
                    obj_cell_10 = New TableCell()
                    obj_cell_10.Text = " "
                    obj_ligne_4.Cells.Add(obj_cell_10)
                    obj_cell_11 = New TableCell()
                    obj_cell_11.Text = FormatNumber(total_credit)
                    obj_cell_11.Font.Bold = True
                    obj_cell_11.HorizontalAlign = HorizontalAlign.Right
                    obj_cell_11.CssClass = "pied"
                    obj_ligne_4.Cells.Add(obj_cell_11)
                    ma_table2.Rows.Add(obj_ligne_4)
       
       
                Finally
       
                    cn.Close()
       
                End Try

     

     

    J'ai trouvé une autre solution mais ça m'intéresserait de savoir qd même ce qui ne va pas.

     

    Merci.

     

     

    vendredi 11 juillet 2008 08:06
  • Bonjour,

     

    Peut-on avoir aussi le détail de l'erreur ?

     

    Cordialement

     

    vendredi 11 juillet 2008 08:09
    Modérateur
  • Le détail de l'exception affichée avec e.ToString( ) donne

     

    Code Snippet

    System.EventArgs

     

     

    Je pense avoir une idée sur l'erreur : le DataReader étant un lecteur vers l'avant ligne par ligne, lorsqu'il arrive "en bas" du fichier (fin de fichier), il faudrait peut être une commande qui le remette sur le premier enregistrement. Ca doit être une question de pointeur ou qq chose du genre.

     

     

    vendredi 11 juillet 2008 11:00
  • Bonjour,

     

    Je pense avoir une idée sur l'erreur : le DataReader étant un lecteur vers l'avant ligne par ligne, lorsqu'il arrive "en bas" du fichier (fin de fichier)

    Tout à fait, il n'est pas possible de repartir en arrière car le DataReader exploite le résultat d'une requête en avant uniquement...Il vous faudra rééxecuter la requête si nécessaire pour repartir depuis le début !

     

    Le détail de l'exception affichée avec e.ToString( ) donne

    Code Snippet

    System.EventArgs

    Ceci n'est pas l'erreur de l'exception..

    Vous devez confondre la variable "e" entre le paramètre de l'exception (du bloc catch) et l'un des paramètres de la méthode auquel vous appelez la méthode e.ToString().

     

    Est-il possible de voir le code complet de la méthode ?

     

    Cordialement

     

     

     

    vendredi 11 juillet 2008 20:03
    Modérateur
  • Vous avez raison. De toute façon, je sais maintenant d'où vient l'erreur.

     

    Merci pour votre aide.

     

    lundi 14 juillet 2008 10:51