예제 #1
0
        private void button13_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Estas seguro de abrir un archivo de respaldo? se remplazara toda la información en el sistema con lo que existe en el archivo de respaldo", "Confirm delete", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                //se abre la ventana para seleccionar acrhivo

                OpenFileDialog openFileDialog1 = new OpenFileDialog();

                openFileDialog1.InitialDirectory = "c:\\";
                openFileDialog1.Filter = "Archivos de sql (*.sql)|*.sql";
                openFileDialog1.FilterIndex = 1;
                openFileDialog1.RestoreDirectory = true;

                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                            //se abre el respaldo
                            try
                            {
                                string constr = "server=localhost;User Id=root;Persist Security Info=True;database=gym";
                                string file = openFileDialog1.FileName;
                                MySqlBackup mb = new MySqlBackup(constr);
                                mb.ImportInfo.FileName = file;
                                mb.ImportInfo.SetTargetDatabase("gym", ImportInformations.CharSet.utf8);
                                mb.Import();
                            }catch(Exception ex){
                                MessageBox.Show("Ocurrio un error "+ex.Message);
                            }

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error del Sistema: " + ex.Message);
                    }
                }

                MessageBox.Show("Información restaurada con exito");

                //se cierran formularios
                cerrarFormuarios();
                //se cierra sesion
                if (Utilidades.clsUsuario.salir())
                {
                    sinSesion();
                }
                else
                {
                    MessageBox.Show(Utilidades.clsUsuario.error);
                }
               
            }
        }
        public static async Task Restore(this MySqlDatabase db, string inputFile, IProgress<int> progress, CancellationToken token)
        {

            await db.ExecuteScript("SET GLOBAL max_allowed_packet = 1024*1024*1024;");

            await Task.Run(() =>
            {

                using (var backup = new MySqlBackup(db.ConnectionString))
                {

                    var tcs = new TaskCompletionSource<bool>();

                    backup.ImportInfo.FileName = inputFile;
                    backup.ImportInfo.AsynchronousMode = true;
                    backup.ImportInfo.AutoCloseConnection = true;
                    backup.ImportInfo.IgnoreSqlError = true;

                    backup.Import();
                    backup.ImportProgressChanged += (sender, e) => progress.Report(e.PercentageCompleted);
                    backup.ImportCompleted += (sender, e) => tcs.SetResult(true);

                    tcs.Task.Wait();

                }

            });

        }