Codigo en C# para crear un respaldo de una base de datos en SQL server y restaurarla
Aquí les dejo un codigo en C# muy útil para cuando hagan sus aplicaciones con bases de datos en SQL server puedan respaldar la base de datos y restaurarla.
Codigo para un botón respaldar:
private void button1_Click(object sender, EventArgs e) { bool desea_respaldar = true; //poner cursor de relojito mintras respalda Cursor.Current = Cursors.WaitCursor; if (Directory.Exists(@"c:\ Respaldo")) { if (File.Exists(@"c:\ Respaldo\resp.bak")) { if (MessageBox.Show(@"Ya habia un respaldo anteriormente ¿desea remplazarlo?", "Respaldo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { File.Delete(@"c:\ Respaldo\resp.bak"); } else desea_respaldar = false; } } else Directory.CreateDirectory(@"c:\ Respaldo"); if (desea_respaldar) { //esto puede ser un método aparte de conexion a la base de datos----------- SqlConnection connect; string con = "Data Source = localhost; Initial Catalog=BD ;Integrated Security = True;"; connect = new SqlConnection(con); connect.Open(); //------------------------------------------------------------------------- //esto puede ser un método aparte para ejecutar comandos SQL--------------- SqlCommand command; command = new SqlCommand(@"backup database BD to disk ='c:\ Respaldo\resp.bak' with init,stats=10", connect); command.ExecuteNonQuery(); //------------------------------------------------------------------------- connect.Close(); MessageBox.Show("El Respaldo de la base de datos fue realizado satisfactoriamente", "Respaldo", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
Código para un botón restaurar:
private void button5_Click(object sender, EventArgs e) { //poner cursor de relojito Cursor.Current = Cursors.WaitCursor; try { if (File.Exists(@"c:\ Respaldo\resp.bak")) { if (MessageBox.Show("¿Está seguro de restaurar?", "Respaldo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { //esto puede ser un método aparte de conexion a la base de datos----------- SqlConnection connect; string con = "Data Source = localhost; Initial Catalog=master ;Integrated Security = True;"; connect = new SqlConnection(con); connect.Open(); //-------------------------------------------------------------------------- //esto puede ser un método aparte para ejecutar comandos SQL---------------- SqlCommand command; command = new SqlCommand("use master", connect); command.ExecuteNonQuery(); command = new SqlCommand(@"restore database BD1 from disk = 'c:\ Respaldo\resp.bak'", connect); command.ExecuteNonQuery(); //-------------------------------------------------------------------------- connect.Close(); MessageBox.Show("Se ha restaurado la base de datos", "Restauración", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else MessageBox.Show(@"No haz hecho ningun respaldo anteriormente (o no está en la ruta correcta)", "Restauracion", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception exp) { MessageBox.Show(exp.Message); } }
Obviamente esta es la forma basica, pueden agregar mas try y catch para prevenir fallas o cambiar la ruta donde se almacena y restaura la base de datos de forma dinamica con un OpenFileDialog u otras formas. Espero les sea útil.
prueba
eXCELENTE EJEMPLO. MIRA, PERO COMO HACER PARA SELECCIONAR UNA CARPETA O DISCO DONDE GUARDAR EL RESPALDO O DE DONDE RECUPERARLO.
GRACIAS
ANTONIO
cuales son la variables, de esta clase, soy inexperto en c# y pues esto es lo q estaba buscando, pero no me funciona, me tira siempre error nose q estoy haciendo mal
necesitas ser mas especifico en que error tienes
como se crea el Directory.Exists porque intento implementar el codigo y me marca errores en esa parte
te ha de faltar agregar una libreria arriba, solo pon el cursor encima de Directory.Exists y solito te sale el renglonsito rojo con la sugerencia de agregar la libreria faltante
Hello! This post could not be written any better! Reading through this post reminds me of my good
old room mate! He always kept chatting about this.
I will forward this post to him. Fairly certain he will have a good read.
Thanks for sharing!
Que tal estoy haciendo un back up pero el problema esta en que me genera un error.
Cannot perform a backup or restore operation within a transaction.
BACKUP DATABASE is terminating abnormally.
alguna idea de como lo puedo arreglar.
segun tu error quiza haya que poner el codigo dentro de un transac y rolback para que funcione. no me habia pasado. googlea un poco al respecto de estos comandos no suena tan complicado el problema
no sabes como hacer eso mismo pero cada cierto tiempo y de forma automatica?
No, pero supongo que tendrias que programar un proyecto windows service para que se ejecute asi como dices.
me sale error en la parte de Directory.Exists File.Exists SqlConnection SqlCommand
Error 2 El nombre ‘Directory’ no existe en el contexto actual E:\Proyecto\proyecto\proyecto\Form1.cs 26 16 proyecto
Error 5 El nombre ‘Directory’ no existe en el contexto actual E:\Proyecto\proyecto\proyecto\Form1.cs 39 19 proyecto
Error 3 El nombre ‘File’ no existe en el contexto actual E:\Proyecto\proyecto\proyecto\Form1.cs 28 23 proyecto
Error 4 El nombre ‘File’ no existe en el contexto actual E:\Proyecto\proyecto\proyecto\Form1.cs 32 27 proyecto
Error 8 No se puede encontrar el tipo o el nombre de espacio de nombres ‘SqlCommand’ (¿falta una directiva using o una referencia de ensamblado?) E:\Proyecto\proyecto\proyecto\Form1.cs 51 19 proyecto
Error 9 No se puede encontrar el tipo o el nombre de espacio de nombres ‘SqlCommand’ (¿falta una directiva using o una referencia de ensamblado?) E:\Proyecto\proyecto\proyecto\Form1.cs 52 33 proyecto
Error 6 No se puede encontrar el tipo o el nombre de espacio de nombres ‘SqlConnection’ (¿falta una directiva using o una referencia de ensamblado?) E:\Proyecto\proyecto\proyecto\Form1.cs 44 19 proyecto
Error 7 No se puede encontrar el tipo o el nombre de espacio de nombres ‘SqlConnection’ (¿falta una directiva using o una referencia de ensamblado?) E:\Proyecto\proyecto\proyecto\Form1.cs 46 33 proyecto
Error 1 Se esperaba una definición de tipo o espacio de nombres, o el fin del archivo E:\Proyecto\proyecto\proyecto\Form1.cs 63 1 proyecto
como corrijo esto estos errores te lo agradeceria
tengo estos errores no se como correguirlos
Error 1 El nombre ‘Directory’ no existe en el contexto actual E:\Proyecto\proyecto\proyecto\Form1.cs 28 16 proyecto
Error 4 El nombre ‘Directory’ no existe en el contexto actual E:\Proyecto\proyecto\proyecto\Form1.cs 41 19 proyecto
Error 2 El nombre ‘File’ no existe en el contexto actual E:\Proyecto\proyecto\proyecto\Form1.cs 30 23 proyecto
Error 3 El nombre ‘File’ no existe en el contexto actual E:\Proyecto\proyecto\proyecto\Form1.cs 34 27 proyecto
como deberia definir Directory y File telo agradeceria
te faltan librerias, siempre que alguna palabra te la subraye en rojo como error es porque no esta bien escrita o falta la libreria correspondiente. Solo pon el cursor encima, veras que sale un ligero subrayado azul a la izquierda, seleccionalo y veras como te sugiere agregar la libreria faltante. Automaticamene te da una buena sugerencia.
agrega la libreria
using System.Data.SqlClient;
using System.IO;
excelente
hola, una pregunta ¿como haria para el caso de oracle? el mismo procedmiento? estoy trabajando c# con oracle 10g
El respaldo me lo crea, pero a la hora de intentar restaurar, mi base de datos queda igual, en el respaldo donde dice «use master» que debo poner ahi? El nombre de mi usuario? porque lo intente, se supone que si la restauro, hasta me da el aviso y todo pero no pasa nada. Gracias de antemano
use master es para usar la base de datos master que es la default que trae el sql server y la que tiene mas permisos
Sin duda un excelente post, esto me ha servido una barbaridad, mil gracias por publicarlo.
Saludes..!!
de nada amigo muchas gracias por comentar
grasias me sirvio mucho solo tengop un proble co el cursor.waitcursor
sale error no se q liberia abrir aber si me ayudas con eso g
grasias
creo debes agregar una libreria o un «using»mero arriba, pon el cursor encima de las palabras que no te reconozca y sale la sugerencia a cual «using» agregar
por que no me deja resaturar, me eniva un mensaje donde dice que la base de datos esta siendo usado actualmente y no restaura
gracias espero su pronta respuesta.
quizá se este usando la Base de datos o tengas abierto cualquier cosa con ella, el SQL server o algo
Hola
Estoy tratando de hacer lo del ejemplo, y me surge la siguiente duda,¿el usuario con el cual se conecta a la base de datos debe tener algún permiso en especial, o solo con ser owner es suficiente?
Solos necesita agregar a la librería «Directory»….
por favor necesito el codigo para respaldar una base de datos oracle desde c#
por favor necesito e codigo para respaldar una base de datos de oracle desde c#
Habrá alguna forma de restaurar la misma base de datos??? Me dice que no puede restaurarla porque está en uso en ésta sesión.