protected void btnCriarBackup_Click(object sender, EventArgs e) { //string database = "inter"; string constring = ConfigurationManager.AppSettings["strConexao"]; //pega os dados do banco do Web.config string database = constring.Substring(9, 5); //corta a string dos dados do banco e pega somente o nome do banco (posicao 9, inter = 5 letras) string nome_arquivo = "bkp_" + database + "_" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".sql"; //faz o nome do arquivo baseado no nome do banco e data local string directory = (Request.PhysicalApplicationPath + "Backup"); //solicita o caminho da aplicação e coloca numa string juntando com Backup string file = (directory + "\\" + nome_arquivo); //coloca o caminho completo do arquivo + nome do arquivo separando com \\ using (MySqlConnection conn = new MySqlConnection(constring)) //instancia um novo objeto MySqlConnection usando os dados do banco contidos em constring { using (MySqlCommand cmd = new MySqlCommand()) //instancia um novo MySqlCommand { using (MySqlBackup mb = new MySqlBackup(cmd)) //instancia um novo MySqlBackup e usa o command de antes como parâmetro { cmd.Connection = conn; //define o comando Conection conn.Open(); //abre a conexão com o banco try //tenta { mb.ExportToFile(file); //CRIAR O BACKUP lblBackup.Text = "Backup efetuado com sucesso!"; } catch (Exception ex) //caso algo dê errado { lblBackup.Text = "Erro ao criar Backup!"; } conn.Close(); //FECHA A CONEXÃO COM O BANCO, NÃO É NECESSÁRIO O DISPOSE(LIMPAR DA MEMÓRIA) POR USAR USING LÁ EM CIMA } } } CarregaGrid(); //Carrega a grid novamente UpdatePanelBkp.Update(); //atualiza o UpdatePanel; string caminho = pegaDirBackup(); //PEGA O DIRETORIO DOS BACKUPS string[] arquivos = Funcoes.tratarArquivosBackup(caminho); //TRATA O NOME DOS BACKUPS //if (arquivos[0] == nome_arquivo.Replace(".sql", "")) // Verifica se o Backup foi realmente criado //{ // //lblBackup.Text = "Backup efetuado com sucesso!"; //} //else //{ // //lblBackup.Text = "Erro ao criar Backup!"; //} // ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true); }
protected static int c = 1; //instancia uma varíavel c para contar quantas vezes o usuário errou a senha protected void lkbConfirmaSenha_Click(object sender, EventArgs e) //EVENTO QUE VALIDA A SENHA DO MASTER AO CLICAR EM CONFIRMAR { string senha = txtSenha.Text; //pega o valor digita no campo senha e armazena na string senha if (!String.IsNullOrEmpty(senha)) //verifica se o campo de senha está fazio { if (Funcoes_DB.ValidaSenha(senha) == 1) //VERIFICA SE A FUNÇÃO DE VALIDAR RETORNOU 1 { c = 1; string caminhoArquivo = Session["caminhoArquivo"].ToString(); //PEGA O CAMINHO DO ARQUIVO DA VARÍAVEL DE SESSÃO string acao = Session["acaoBackup"].ToString(); //PEGA A AÇÃO DO USUÁRIO (DOWNLOAD OU BACKUP) E COLOCA NUMA STRING acao if (acao == "Download") //SE A ACAO FOR DOWNLOAD (SE CLICOU NO BOTÃO DOWNLOAD) { PostBackTrigger trigger = new PostBackTrigger(); //INSTANCIA UMA NOVA TRIGGER QUE RECARREGARÁ A PÁGINA (NECESSÁRIO PARA FAZER O DOWNLOAD) trigger.ControlID = timerDownload.UniqueID; //DEFINE QUE O CONTROLE timerDownload IRÁ FAZER O POSTABACK(RECARREGAMENTO) DA PÁGINA UpdatePanelModal.Triggers.Add(trigger); //ADICIONA A TRIGGER AO UPDATEPANEL DA MODAL lblMsgModal.Style.Add("color", "green"); //DEIXA O TEXTO DA MODAL VERDE lblMsgModal.Text = "Seu download iniciará em breve..."; //COLOCA A MENSAGEM DE INICANDO DOWNLAOD timerDownload.Enabled = true; /*HABILITA O CONTADOR DO DOWNLOAD: QUANDO O TEMPO ESGOTAR, SERÁ DISPARADO O MÉTODO timerDownload_Tick * ESSE MÉTODO ESTÁ QUASE NO FIM DA PÁGINA */ Session["esperandoDownload"] = "sim"; //DEFINE UMA VARÍAVEL DE SESSÃO PARA CONTROLAR SE UM DOWNLOAD É ESPERADO OU NÃO } else if (acao == "Restauracao") //SE A ACAO FOR RESTAURAÇÃO (SE CLICOU NO BOTÃO RESTAURAR) { string constring = ConfigurationManager.AppSettings["strConexao"]; //pega os dados do banco do Web.config string database = constring.Substring(9, 5); //corta a string dos dados do banco e pega somente o nome do banco (posicao 9, inter = 5 letras) string nome_arquivo = "bkpSec_" + database + "_" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".sql"; //faz o nome do arquivo baseado no nome do banco e data local string directory = (Request.PhysicalApplicationPath + "Backup"); //solicita o caminho da aplicação e coloca numa string juntando com Backup //COMEÇA O PROCESSO DE BACKUP DE SEGURANÇA ----------> string file = (directory + "\\" + nome_arquivo); using (MySqlConnection conn = new MySqlConnection(constring)) //instancia um novo objeto MySqlConnection usando os dados do banco contidos em constring { using (MySqlCommand cmd = new MySqlCommand()) //instancia um novo MySqlCommand { using (MySqlBackup mb = new MySqlBackup(cmd)) //instancia um novo MySqlBackup e usa o command de antes como parâmetro { cmd.Connection = conn; //define o comando Conection conn.Open(); //abre a conexão com o banco try //tenta { mb.ExportToFile(file); //CRIAR O BACKUP lblMsgModal.Style.Add("color", "green"); lblMsgModal.Text = "Backup de segurança efetuado com sucesso!"; } catch (Exception ex) //CASO NÃO CONSIGA CRIAR O BACKUP DE SEGURANÇA { UpdatePanelBkp.Update(); lblMsgModal.Style.Add("color", "#960d10"); lblMsgModal.Text = "Erro ao criar Backup de Segurança! Cancelando a Restauração;"; //MENSAGEM DE ERRO conn.Close(); System.Threading.Thread.Sleep(1000); Response.Redirect("~/Configuracoes"); //RECARREGA A PÁGINA } conn.Close(); //FECHA A CONEXÃO COM O BANCO, NÃO É NECESSÁRIO O DISPOSE(LIMPAR DA MEMÓRIA) POR USAR USING LÁ EM CIMA } } } CarregaGrid(); UpdatePanelBkp.Update(); string caminho = pegaDirBackup(); string[] arquivos = Funcoes.tratarArquivosBackup(caminho); //<---------------- TERMINA O BACKUP DE SEGURANÇA if (arquivos[0] == nome_arquivo.Replace(".sql", "")) // Verifica se o Backup foi realmente criado { lblMsgModal2.Text = "Backup de segurança efetuado com sucesso!"; if (Funcoes_DB.DropDatabase() == 0) { using (MySqlConnection conn = new MySqlConnection(constring)) //instancia um novo objeto MySqlConnection usando os dados do banco contidos em constring { using (MySqlCommand cmd = new MySqlCommand()) //instancia um novo MySqlCommand { using (MySqlBackup mb = new MySqlBackup(cmd)) //abre a conexão com o banco { cmd.Connection = conn; //define o comando Conection conn.Open(); //abre a conexão com o banco try //TENTA { mb.ImportFromFile(caminhoArquivo); //RESTAURA O SISTEMA USANDO O BACKUP CLICADO lblMsgModal2.Style.Add("color", "green"); lblMsgModal2.Text = "Sistema Restaurado com sucesso!"; } catch (Exception ex) { lblMsgModal2.Style.Add("color", "#960d10"); lblMsgModal2.Text = "Erro ao restaurar Backup"; } conn.Close(); //FECHA A CONEXÃO COM O BANCO, NÃO É NECESSÁRIO O DISPOSE(LIMPAR DA MEMÓRIA) POR USAR USING LÁ EM CIMA } } } } } } } else { if (c == 3) //SE HOUVE MAIS DE 3 TENTATIVAS DE CONFIRMAÇÃO DE SENHA { c = 1; //RESETA A VARÍAVEL DE CONTROLE Session.RemoveAll(); //REMOVE E LIMPA TODAS SESSÕES Response.Redirect("~/Login"); //REDIRECIONA PARA A PÁGINA DE LOGIN } else //CASO AINDA NÃO ERROU 3 VEZES { lblMsgModal.Style.Add("color", "#960d10"); lblMsgModal.Text = "Senha incorreta!"; c++; //AUMENTA O NÚMERO DE VEZES QUE A SENHA DIGITADA FOI INCORRETA EM 1 } } } else { lblMsgModal.Style.Add("color", "#960d10"); lblMsgModal.Text = "O campo senha deve ser preenchido!"; } }