2010-10-03 10 views
1

Je veux exporter une table d'une base de données mysql vers un fichier txt ou csv comme vous pouvez le faire dans phpmyadmin. J'utilise actuellement le code ci-dessous, mais après que le programme a fonctionné pendant quelques heures, il va lancer une erreur "essayé de lire après le flux".Comment exporter/télécharger une table à partir de la base de données mysql en utilisant C#?

MySqlConnection connection = new MySqlConnection(MyConString); 
      MySqlCommand command = connection.CreateCommand(); 
      connection.Open(); 
      command.CommandText = "SELECT * FROM mytable"; 
      MySqlDataReader result = command.ExecuteReader(); 
       if (result != null) 
        while (result.Read()) 
        { 
         string thisrow = ""; 
         for (int i = 0; i < result.FieldCount; i++) 
          thisrow += result.GetValue(i).ToString() + ","; 
         pass = Regex.Replace(thisrow, @"\W*", ""); 
         if (!hshTable.ContainsKey(pass)) hshTable.Add(pass, pass); 
        } 
      connection.Close(); 

est-il une commande comme myquerystring = "LOAD DATA LOCAL INFILE 'C:/mysqltable.txt' INTO TABLE mytable FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'";

qu'au lieu de charger un fichier à la base de données télécharge la table à la place?

ok j'ai essayé

MySqlConnection connection = new MySqlConnection(MyConString); 
     MySqlCommand command = connection.CreateCommand(); 
     connection.Open(); 
      myquerystring = "SELECT * INTO OUTFILE 'E:/mysqldump.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' FROM mytable"; 
       command.CommandText = myquerystring; 
       command.ExecuteNonQuery(); 

mais il continue à me donner un « Accès refusé pour l'utilisateur « admin » @ « myip »(en utilisant le mot de passe: YES) » erreur où myip est vraiment mon ip et non les serveurs même si l'adresse IP des serveurs est spécifiée dans MyConString.

+0

Avez-vous envisagé d'utiliser mysqldump http://dev.mysql.com/ doc/refman/5.1/fr/mysqldump.html pour cela? –

+0

Oui, mais les applications tierces ne peuvent pas être utilisées pour ce projet. Cela doit être fait par le codage. Y at-il une commande mysql que je peux exécuter pour télécharger une table en tant que fichier? – Jon

Répondre

1

Vous pouvez essayer ceci:

SELECT * INTO OUTFILE 't:/mysqldump.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM mytable 

Et rappelez-vous que le propriétaire du processus MySql doit avoir des privilèges pour écrire dans un endroit donné.

+0

J'ai essayé mais ça continue à me donner une erreur «Accès refusé pour l'utilisateur 'admin' @ 'myip' (using password: YES)» où myip est vraiment mon ip et non les serveurs même si l'IP des serveurs est spécifiée dans MyConString. – Jon

+0

Voir http://dev.mysql.com/doc/refman/5.0/fr/select.html#id4599936 Vous devez avoir le privilège 'FILE'. E: \ mysqldump.csv doit également être un chemin valide sur la machine du serveur, pas sur votre ordinateur. Donc, si votre application ne fonctionne pas sur le même serveur que la base de données MySQL, et que vous n'avez pas accès au système de fichiers du serveur, mieux vaut abandonner l'idée. J'essaierais de limiter les résultats de la requête à quelques milliers de lignes, de rétablir la connexion et de continuer à partir de la dernière ligne sauvegardée. –

0

hi fait quelque chose de similaire il y a quelques années en utilisant xsl. J'ai reçu un xml d'un service Web et l'ai transformé en un fichier csv à transmettre à un lot qui a inséré des données dans certaines tables. Ce n'est pas exactement votre situation mais l'ensemble de données fournit des méthodes pour exporter vers xml. Le nombre d'enregistrements peut être un problème (il faut beaucoup de temps pour remplir les données) et vous devez ajouter une étape (de l'ensemble de données à xml puis à csv)

Questions connexes