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 :

Sauvegarde BDD MySql avec vue


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 50
    Points
    50
    Par défaut Sauvegarde BDD MySql avec vue
    Salut à toutes et à tous,

    Voilà j'ai réalisé une application en lien avec une BDD MySql. Dans mon application il y a une form "Sauve_DB_MySQL.cs" qui me permet de sauvegarder ou de restauré ma BDD en cas de pépin sur cette dernière sur un simple click bouton.

    Les deux actions (sauvegarde et restaure) fonctionnent très bien. Le seul petit HIC c'est que lorsque je clique sur le bouton sauvegarde il m'exporte bien toute les tables de la BDD (au format sql) mais sans la vue (oui j'ai une vue dans ma BDD).

    Ma question : Comment exporter ma BDD en incluant les vues ?


    Voilà mon code :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using MySql.Data.MySqlClient;
     
    namespace Gestion_des_produits
    {
        public partial class Sauve_DB_MySQL : Form
        {
            //Déclaaration des variables.
            DialogResult resultat;
     
            //********************//
            //*** CONSTRUCTEUR ***//
            //********************//
            public Sauve_DB_MySQL()
            {
                InitializeComponent();
            }
     
            //*************************************************************//
            //*** ÉVÉNEMENT CLICK - sur clique du bouton "btn_save_BDD" ***//
            //*************************************************************//
            private void btn_save_BDD_Click(object sender, EventArgs e)
            {
                //MessageBox YesNo - Confirme la demande d'action. 
                resultat = MessageBox.Show("Attention, vous allez sauvegarder votre base de donnée MySql. Voulez-vous confirmer ce choix ?", "Demande de confirmation sauvegarde", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);
     
                //Vérification YesNo - Vérifie si l'utilisateur à confirmé son action.
                if (resultat == DialogResult.Yes)
                {
                    try
                    {
                        //Déclaration de la variable (constr) et affectation de la valeur de connection au serveur MySql.
                        string constr = Properties.Settings.Default.MyConnectionProduit;
     
                        //Déclaration de la variable (file) et affectation de la valeur du chemin d'enregistrement du fichier.
                        string file = "C:\\Users\\" + Environment.UserName + "\\Desktop\\Base_de_donnee_m_ayoube_be.sql";
     
                        //Création de l'objet (mb) de type MySqlBackup avec pour paramètre la connection au serveur MySql.
                        MySqlBackup mb = new MySqlBackup(constr);
     
                        //Exportation de la base de donnée vers le chemin spécifié.
                        mb.ExportInfo.FileName = file;
                        mb.Export();
     
                        //MessageBox - Affiche sauvegarde avec succes.
                        MessageBox.Show("La sauvegarde de la base de donnée à bien était effectué.");
                    }
                    catch
                    {
                        //MessageBox - Affiche erreur.
                        MessageBox.Show("Une erreur est survenu lors de la sauvegarde de la base de donnée.");
                    }
                }
                //Vérification YesNo - FIN
            }
     
            //*************************************************************//
            //*** ÉVÉNEMENT CLICK - sur clique du bouton "btn_restaure_BDD" ***//
            //*************************************************************//
            private void btn_restaure_BDD_Click(object sender, EventArgs e)
            {
                //MessageBox YesNo - Confirme la demande d'action. 
                resultat = MessageBox.Show("Attention, vous allez restaurer votre base de donnée MySql. Voulez-vous confirmer ce choix ?", "Demande de confirmation restauration", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);
     
                //Vérification YesNo - Vérifie si l'utilisateur à confirmé son action.
                if (resultat == DialogResult.Yes)
                {
                    //Création de l'objet (obj_img_file) de type (OpenFileDialog).
                    OpenFileDialog obj_BDD_file = new OpenFileDialog();
     
                    //Filtrer les extentions images autorisé.
                    obj_BDD_file.Filter = "Image file|*.sql";
     
                    //Chemin par défaut lors de l'ouverture de la box pour selectionner une image. 
                    obj_BDD_file.InitialDirectory = "Desktop";
     
                    //Titre de la box pour selectionner une image.
                    obj_BDD_file.Title = "Selectionnez votre fichier : Base_de_donnee_m_ayoube_be.sql !";
     
                    //Vérification ShowDialog - Si selection fichier.
                    if (obj_BDD_file.ShowDialog() == DialogResult.OK)
                    {
                        try
                        {
                            //Déclaration de la variable (constr) et affectation de la valeur de connection au serveur MySql.
                            string constr = Properties.Settings.Default.MyConnectionProduit;
     
                            //Déclaration de la variable (file) et affectation de la valeur du chemin d'enregistrement du fichier.
                            string file = obj_BDD_file.FileName;
     
                            //Création de l'objet (mb) de type MySqlBackup avec pour paramètre la connection au serveur MySql.
                            MySqlBackup mb = new MySqlBackup(constr);
     
                            //Exportation de la base de donnée vers le chemin spécifié.
                            mb.ImportInfo.FileName = file;
                            mb.Import();
     
                            //MessageBox - Affiche sauvegarde avec succes.
                            MessageBox.Show("La restauration de la base de donnée à bien était effectué.");
                        }
                        catch
                        {
                            //MessageBox - Affiche erreur.
                            MessageBox.Show("Une erreur est survenu lors de l'importation de la base de donnée.");
                        }  
                    }
     
                }
                //Vérification YesNo - FIN
            }
     
            //*************************************************//
            //*** ÉVÉNEMENT CLICK - sur le bouton "Retour" ***//
            //*************************************************//
            private void btn_retour_Click(object sender, EventArgs e)
            {
                //Création d'un obet (form_action) de type (Action).
                Action form_action = new Action(null);
     
                //Fermeture de ce form.
                this.Close();
     
                //Ouverture de form (Action).
                form_action.Show();
            }
     
            //*************************************************//
            //*** ÉVÉNEMENT CLICK - sur le bouton "Quitter" ***//
            //*************************************************//
            private void btn_quitter_Click(object sender, EventArgs e)
            {
                //Quitter l'application.
                Application.Exit();
            }
        }
    }

    Voilà en espérant que vous puissiez m'aider ou me guider

  2. #2
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Bonjour,

    d'où provient cette classe : MySqlBackup

    car quand je regarde la documentation du namespace MySql.Data.MySqlClient, je ne la vois pas dedans
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Oups effectivement j'ai oublié de mettre les class

    Enfaite j'ai été sur ce site qui proposé dll et class pour pouvoir manipulé MySql. Il y a tout ici :

    MySqlBackup.NET

  4. #4
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    En regardant un peu les sources de la DLL et la documentation se trouvant sur le lien mais sans tester car je n'ai pas encore réinstaller MySql, un truc du genre devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Exportation de la base de donnée vers le chemin spécifié.
    mb.ExportInfo.FileName = file;
    mb.ExportInfo.ExportViews  = true
    mb.Export();
    Dans la documentation :

    ExportInfo (ExportInformations) - Gets or Sets the Informations that define behaviour of Export Process. Read more at Class of ExportInformations below.
    ...
    ExportStoredProcedures - bool - Gets or Sets a value indicates whether the Stored Procedures should be exported.
    ExportFunctions - bool - Gets or Sets a value indicates whether the Stored Functions should be exported.
    ExportTriggers - bool - Gets or Sets a value indicates whether the Stored Triggers should be exported.
    ExportViews - bool - Gets or Sets a value indicates whether the Stored Views should be exported.
    ExportEvents - bool - Gets or Sets a value indicates whether the Stored Events should be exported.
    Voila tenez nous au courant si cela fonctionne
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Nope j'ai déjà essayé ainsi mais cela ne fonctionne pas.

    J'ai également lu la documentation et il semble que dans une class nommé "ExportInformations.cs", ils ont déjà mis à "true" par défaut pour les exports views.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Gets or Sets a value indicates whether the Stored Views should be exported.
    public bool ExportViews = true;
    Donc à moins de mettre "false" si l'on voulait ne pas exporter les vues je pense que cette ligne de code n'est pas nécessaire, mais merci pour ta réponse en tout cas.

  6. #6
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Ce que tu peux faire c'est lié les sources de la Dlls que tu utilises et faire du debug pour voir ce qu'il se passe.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Alors j'ai débuggé le tout et il me semble que le souci viens de cette procédure c'est à partir de là que tout ce joue :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    private void GetViews(ref MySqlCommand cmd)
            {
                try
                {
                    if (ServerMajorVersion >= 5)
                    {
                        cmd.CommandText = "SHOW FULL TABLES FROM " + DatabaseName + " WHERE Table_type like 'VIEW';";
                        MySqlDataAdapter daView = new MySqlDataAdapter(cmd);
                        DataTable dtView = new DataTable();
                        daView.Fill(dtView);
                        daView = null;
     
                        foreach (DataRow dr in dtView.Rows)
                        {
                            cmd.CommandText = "SHOW CREATE VIEW `" + dr[0].ToString() + "`;";
                            MySqlDataAdapter daViewCur = new MySqlDataAdapter(cmd);
                            DataTable dtCurView = new DataTable();
                            daViewCur.Fill(dtCurView);
                            daViewCur = null;
     
                            string createSql = "";
                            object ob = dtCurView.Rows[0][1];
     
                            if (ob is System.String)
                            {
                                createSql = ob + "";
                            }
                            // It has been reported that, in some unknown cases, the query will return
                            // byte array.
                            // Report: http://www.codeproject.com/Messages/4450086/Small-changes-in-Code.aspx
                            else if (ob is System.Byte[])
                            {
                                UTF8Encoding enc = new UTF8Encoding();
                                createSql = enc.GetString((byte[])ob);
                            }
     
                            StoredView.Add(dr[0].ToString(), createSql.Replace("\r\n", "^^^^").Replace("\n", "\r\n").Replace("^^^^", "\r\n") + ";");
                        }
                    }
                }
                catch
                {
                    // Purposely do nothing.
                    // Trap exception that raised due to restriction of user privilege
                    // The MySQL User used in this connection is not allowed to access Views
     
                    // Clear and Reset Collection
                    StoredView = new Dictionary<string, string>();
                }
            }

    Arrivé ici : if (ServerMajorVersion >= 5)

    il ne va pas plus loin dans la procédure. La question est qu'est ce que ServerMajorVersion ? et de quel version parle t-il ? de MySql ? J'utilise MySQL 3.5.2.2 (en local) est ce que le problème viendrais de là ? Ou peut être que je m'y suis mal pris lorsque j'ai créer ma View ?

    Aaaaaaaaargh tant de question

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Solution trouvé, un peu radicale mais au moins ça fonctionne. Et donc pour ceux qui rencontreront ou chercheront une solution face à ce problème :

    J'ai tout simplement supprimer la condition mentionné juste au dessus à savoir

    if (ServerMajorVersion >= 5)

    cette procédure ce trouve dans la class "Database.cs"

    Je ne sais pas trop de quel version, ServerMajorVersion, à pour but de vérifier mais sans ça cela fonctionne pour une BDD MySQL en local. Quand je passerai sur une BDD héberger je le replacerai pour voir si le problème est toujours présent.

    Voilà en tout les cas merci à toi infosam76 tu m'as été d'une grande aide sans toi je n'aurai même pas pensé à faire le débug sur la dll, tu assures l'ami.

    Édit : Je ne pouvais laisser ainsi un mystère irrésolu sans comprendre à quoi pouvais bien servir cette "maudite" condition (if (ServerMajorVersion >= 5))

    En relisant la procédure en elle même on a la réponse dans les commentaires qu'ils ont laissé :

    // Purposely do nothing.
    // Trap exception that raised due to restriction of user privilege
    // The MySQL User used in this connection is not allowed to access Views


    Donc en gros les Vues n'était pas pris en compte à cause des privilèges de l'utilisateur, qui utilise MySQL. Et c'était fait exprès en plus

    Voilà là je peux continuer à bosser sur mon application avec l'esprit serein

  9. #9
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    De rien content si j'ai pu t'aider, et moi j'en ai appris un peu plus sur MySql et C# ;-)
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2008, 16h01
  2. Stratégie de sauvegarde BDD mysql
    Par Thotem dans le forum Administration
    Réponses: 4
    Dernier message: 21/06/2007, 19h42
  3. manipuler une BDD mysql avec eclipse
    Par Mounr dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/06/2007, 01h36
  4. Réponses: 2
    Dernier message: 19/02/2007, 13h02
  5. Sauvegarde bdds MySQL
    Par JoN28fr dans le forum Apache
    Réponses: 8
    Dernier message: 10/06/2006, 12h55

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