Sauvegarde d'une requete mySQL en CSV

Résolu
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018 - Modifié le 22 mars 2018 à 14:20
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018 - 27 mars 2018 à 08:42
Bonjour,

J'utilise le lecteur multimédia Kodi si vous connaissez. Il est configuré pour utilisé une base de donnée MySQL. Je tente d'exporter mes films dans un fichier CSV.

Je reprend la programmation après l'avoir arrêter sous Delphi.

J'arrive à envoyer une requête au serveur mais il ne sauvegarde pas dans un fichier, pas d'erreur par contre. Je pense que je dois pas sauvegarder directement depuis la requête
cn = new MySqlConnection("SERVER=" + Properties.Settings.Default.Sadresse + ";PORT=" + Properties.Settings.Default.Sport + ";DATABASE=myvideos107;UID=" + Properties.Settings.Default.Sutilisateur + ";PWD=" + Properties.Settings.Default.Spasse + ";");
 
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "Fichier csv|*.csv";
            saveFileDialog1.Title = "Sauvegarde de la liste de film";
            saveFileDialog1.ShowDialog();
            string emplacement = saveFileDialog1.FileName;
            emplacement=emplacement.Replace("\\", "\\\\");
            string chainedesav= "SELECT b.c00";
            if (cannee.Checked)
                chainedesav = chainedesav + ", b.premiered";
            if (cemplacement.Checked)
                chainedesav = chainedesav + " , b.c22";
            if (cnom.Checked)
                chainedesav = chainedesav + ", a.strFilename";
            if (Cgenre.Checked)
                chainedesav = chainedesav + ", b.c14";
            if (cajout.Checked)
                chainedesav = chainedesav + ", a.dateAdded ";
            chainedesav = chainedesav + " INTO OUTFILE '";
 
            if (saveFileDialog1.FileName != "")
            { chainedesav = chainedesav + emplacement;
                chainedesav = chainedesav + "' FROM files AS a, movie AS b WHERE a.idFile = b.idFile;";
                
             }
//pour verifier la requete
                MessageBox.Show(chainedesav);
 
 
               if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
 
                }
                cn.Open();
          
 
                MySqlCommand requete = new MySqlCommand(@chainedesav);

 
                requete.Connection = cn;
                MySqlDataReader reader = requete.ExecuteReader();
 
   


EDIT : Ajout des balises de code


3 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
22 mars 2018 à 14:25
Bonjour,

Je vois bien la connexion à ta bdd ....
La préparation d'un fichier CSV
La requête qui doit te lister le contenu à sauvegarder ....
Mais.... ensuite ? Tu as instancié un "reader" ... il faut donc t'en servir (boucler dessus ) pour lire le résultat de la requête puis le mettre dans ton fichier....
Sinon c'est normal que ça ne marche pas.
0
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
22 mars 2018 à 14:29
Je debute en SQL et j'ai des souvenirs de programmations :-) alors j'ai du oublié quelque chose... la requete fonctionne en local car elle intégre l'enregistrement en CSV, je pensais donc que cela fonctionnerait pareil...
des idées ?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344 > Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
22 mars 2018 à 15:50

des idées ?

Ben... tu peux essayer de dire "Abracadabra" pour voir ... :-)
SInon....pas plus que la réponse déjà donnée....

Tu as instancié un "reader" ... il faut donc t'en servir (boucler dessus ) pour lire le résultat de la requête puis le mettre dans ton fichier....


Pour boucler :
//Read the data and store them in the list
 while (dataReader.Read())
 {
    // ici ton code pour ajouter les lignes à ton csv
  //--------
}


//close Data Reader
   dataReader.Close();
0
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
22 mars 2018 à 16:15
Merci Jordane45 pour ta réponse, je regarde ce soir je suis au travail :-(
0
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
27 mars 2018 à 00:01
voila la réponse

          MySqlCommand requete = new MySqlCommand(@chainedesav);


requete.Connection = cn;
MySqlDataReader reader = requete.ExecuteReader();


while (reader.Read()) // on va parcourir l'ensemble des lignes du dataReader
{

for (int m = 0; m < reader.FieldCount; m++) // on parcours la ligne courante du dataReader
{
csv += reader[m].ToString()+";";
}
csv += "\r\n";


}





File.WriteAllText(emplacement, csv);
reader.Close();
this.Close();

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
27 mars 2018 à 00:28
Ben voila... tu as utilisé le reader pour boucler dessus.
Parfait.
Bon courage pour la suite.
0
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
27 mars 2018 à 08:42
Euh j'ai déjà reposé une question, c 'est pas forcément des points que j'ai l'habitude de faire. :-)
0
Rejoignez-nous