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

C# Discussion :

Export d'une BDD vers le format CSV


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Export d'une BDD vers le format CSV
    Salut, je souhaite exporter une base de données, contenant un grand nombre de résultats (millions) vers le format CSV et je rencontre des problèmes. Je débute en c#.

    Le script suivant rencontre des problèmes, le connecteur odbc plante à partir d'un trop grand nombre de résultats. Je ne sais pas si un simple count en sql est gourmand, mais ça suffit pour faire planter le connecteur.

    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
     
    public void exportDatabaseToCSV()
    {
    	int iBrowseTable = 0;
    	int iBrowseColumn = 0;
    	string sTableName;
     
    	using (StreamWriter streamWriter = new StreamWriter(@"C:\export.csv"))
    	{
    		DataTable aListTable = this.getTables();
    		foreach (DataRow dr in aListTable.Rows) /*** Parcours des tables ***/
    		{
    			sTableName = dr[2].ToString();
     
    			// Affichage de la table
    			streamWriter.Write(sTableName + ";" + dr[4].ToString() + "\n;");
    			OdbcDataReader aListResult = this.getResults("SELECT COUNT(*) FROM " + sTableName);
     
    			// Affichage des noms des colonnes
    			while (iBrowseTable < aListResult.FieldCount) 
    				streamWriter.Write(aListResult.GetName(iBrowseTable++) + ";");
    			streamWriter.Write("\n;");
     
    			// Affichage des résultats
    			while (aListResult.Read()) 
    			{ 
    				while (iBrowseColumn < aListResult.FieldCount)
    					streamWriter.Write(aListResult[iBrowseColumn++] + ";");
    				iBrowseColumn = 0;
    				streamWriter.Write("\n;");
    			}
    		}
    	}
    }
    Si vous savez ce que je peux faire pour alléger, je suis preneur !

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    C'est quoi l'exception?
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs. Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    J'ai pas d'erreur, il faut redémarrer le gestionnaire de connexion odbc. Je n'ai aucune information sur le serveur et le type de base de données. Je voulais récupérer les données par paquet (par exemple de 20 000) mais les limit, top, ou rownum ne fonctionne pas.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Je viens de réessayer sur uniquement les 10 premières tables et j'ai l'erreur suivante au bout de certaines tables, ça importe bien les données pour les tables précédents l'erreur :

    Exception System.InvalidOperationException was thrown in debuggee:
    Handle is not initialized.

    set_Target()
    CloseConnection()
    Close()
    Finalize() - Connect.cs:131,4
    et la ligne 131 c'est le destructeur de la connection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ~Connect()
    {
    	this.instance.Close();
    }

  5. #5
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    c'est quoi instance? tu peux poster toute la classe Connect?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    C'est un objet Odbcconnection. C'est étrange parfois j'ai cette exception, parfois non. Je teste sur un nombre de plus en plus élevé de tables pour voir jusqu'où ça fonctionne, je vais voir.

    Merci quand même.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/08/2008, 12h43
  2. Export d'une requête vers Excel et Format Monétaire
    Par Currahee dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/05/2008, 11h50
  3. exporter une BD vers un format csv
    Par 4seb5 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/05/2007, 14h21
  4. [Macro]exporter une table vers un fichier.csv
    Par samca dans le forum IHM
    Réponses: 2
    Dernier message: 24/04/2007, 21h25
  5. Exportation d'une bd mysql vers un format csv
    Par derric8016 dans le forum Outils
    Réponses: 5
    Dernier message: 13/01/2006, 21h58

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