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

ASP.NET Discussion :

génération d'un ficier csv à partir d'un résultat de requête


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut génération d'un ficier csv à partir d'un résultat de requête
    Bonjour ,
    J'utilise le code suivant pour générer un fichier CSV à partir du résultat d'une requête.
    L'idée est de parcourir le reader et écrire dans le fichier.
    est ce que vous avez une idée plus optimale, car pour les fichiers de grandes tailles (49M), ça nécessite beaucoup de temps.
    Merci

    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
    Dim vTab As String
                vTab = vbTab
                Dim sw As StreamWriter
                sw = New StreamWriter(Server.MapPath("./TempReports/263.CSV"), False, System.Text.Encoding.Unicode)
     
                Dim Requete As String = "SELECT ...."
            comm = New OracleCommand(Requete, ConnExcel)
     
                vReader = comm.ExecuteReader
    .....
     
          While vReader.Read
                    For j = 1 To NombreColonnes - 1
                        If Not IsDBNull(vReader(j)) Then
                            sw.Write(Trim(vReader(j)) & vTab)
                        Else
                            sw.Write("" & vTab)
                        End If
                    Next
      End While
      vReader.Close()
     
                sw.Close()
                ConnExcel.Close()
                ConnExcel.Dispose()
                End While

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Pour quel usage tu exportes en csv? Il existe la sérialisation XML qui est très efficace.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    Je fais des exports CSV suite à la demande des utilisateurs

  4. #4
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Il ne faut pas toujours faire ce que les utilisateurs demandent. Jette un oeil ici: http://immobilis.developpez.com/tuto...grace-a-excel/. Qu'en penses-tu?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Maintenant, à ma connaissance, il n'y a pas de fonction d'export en CSV natif. Tu peux regarder ici aussi: http://immobilis.developpez.com/tuto...-api/#LIII-B-2. Dans ce programme, j'ai des fonctions pour faire un csv.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 189
    Par défaut
    Si tu veux les convaincre faut surtout dire aux utilisateurs qu'ils peuvent ouvrir un fichier xml avec excel
    et qu'il y aura une plus grande flexibilité si tu dois ajouter de nouvelles colonnes

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    Est ce qq peut m'aider à créer un fichier XML à partir du résultat de la requête.
    Merci

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par DeveloppeurWeb Voir le message
    Est ce qq peut m'aider à créer un fichier XML à partir du résultat de la requête.
    Merci
    Tu as pas lu le tuto?

    EDIT Tu peux aussi regarder ici: http://msdn.microsoft.com/fr-fr/libr....writexml.aspx
    "Winter is coming" (ma nouvelle page d'accueil)

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    le faite de passer par datatable revient à ce que j'ai fait, car pour convertir le oracledatareader en datatable , va prendre beaucoup de temps

  10. #10
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par DeveloppeurWeb Voir le message
    le faite de passer par datatable revient à ce que j'ai fait, car pour convertir le oracledatareader en datatable , va prendre beaucoup de temps
    Ben non. Utilise la fonction Fill d'un DataAdapter: http://msdn.microsoft.com/fr-fr/libr...ll(VS.80).aspx

    A+

    EDIT Tu peux aussi jeter un oeil ici: http://rdonfack.developpez.com/tutor...ework-net/#LIV
    "Winter is coming" (ma nouvelle page d'accueil)

  11. #11
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    même chose, puisque ça va prendre du temps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Requete = "SELECT " & Valeur_Colonnes & " FROM CHOPE.XIMP_DBQ001 WHERE  NUM_DEM=263"
     
                Dim daAuthors As New OracleDataAdapter(Requete, ConnExcel)
     
                Dim dsSales As New DataSet()
                ' Load data from database
                daAuthors.Fill(dsSales, "Sales")
     
     
                ' Write XML to file
                dsSales.WriteXml(Server.MapPath("./TempReports/263.XML"))
    est ce qu'il n y a pas un moyen pour avoir un fichier XML sans passer par des objets comme DATASET?

  12. #12
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 189
    Par défaut
    ben tu crées une classe serializable mais je vois pas pq tu veux pas passer par un dataset

    puis bon prendre du temps...

  13. #13
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    Donc, il n y a pas une solution pour avoir un traitement plus rapide que le mien
    (lire un datareader et écrire dans un ficher)

  14. #14
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 189
    Par défaut
    on peut difficilement faire plus court...

    à part faire l'écriture du fichier par le serveur BD

    Peut-être mettre les valeurs dans une variable et faire un seul write.
    (mais normalement le write gère un buffer donc même comme ca pas sure que ca va accélérer le traitement)


    Et vérifier ce qui rend le traitement long si c'est la requete vérifier qu'il y a un index sur ton No_Demande et si l'éxécution de la requête prend 10 minutes Vouloir optimiser le code .Net va pas changer grand chose

  15. #15
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par DeveloppeurWeb Voir le message
    Donc, il n y a pas une solution pour avoir un traitement plus rapide que le mien
    (lire un datareader et écrire dans un ficher)
    Le datareader est l'objet le plus rapide pour lire des données. Maintenant, ce serait intéressant de connaître les temps d'exécution dont tu parles. Je me souviens avoir dû créer des fichiers XML de plusieurs 10aines de Mo en quelques dizaines de secondes avec un XmlTextWriter et des SqlDataAdapter. Donc...
    "Winter is coming" (ma nouvelle page d'accueil)

  16. #16
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    est ce que tu as un exemple, stp?

  17. #17
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Tu peux répondre à ceci avant?
    Citation Envoyé par Immobilis Voir le message
    Maintenant, ce serait intéressant de connaître les temps d'exécution dont tu parles
    "Winter is coming" (ma nouvelle page d'accueil)

  18. #18
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Par défaut
    Enfin,
    J'ai résolu mon problème en utilisant FetchSize de OracleCommand et ça a laissé 1 minute au lieu de 5 heures

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

Discussions similaires

  1. Regular Expression à partir d'un résultat de requête SQL
    Par cam024 dans le forum Général Python
    Réponses: 6
    Dernier message: 09/07/2015, 14h19
  2. [AC-2007] Filtre de forme à partir d'un résultat de requête
    Par c-load13 dans le forum Access
    Réponses: 2
    Dernier message: 02/07/2012, 08h41
  3. Fil d'ariane à partir d'un résultat de requête nested
    Par CaviarNAS dans le forum Langage
    Réponses: 3
    Dernier message: 14/12/2011, 19h18
  4. Génération d'un csv à partir de mysql
    Par Doussa_info dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/04/2011, 15h30
  5. Réponses: 5
    Dernier message: 08/01/2009, 09h05

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