Introducción:
El código que te voy a mostrar está adaptado y convertido a C# de una
respuesta en mis foros:
http://foros.elguille.info/Mensajes.aspx?ID=24924
El autor de ese "post" es Ħąrvąl
así que... todos los "créditos" son para él, ya que lo único que he hecho yo
es hacerlo funcional y con un ejemplo, tanto para Visual Basic 2005 como
para Visual C# 2005, aunque en esta página solo te muestro el código de C#,
el código para Visual Basic 2005 está en este link:
Hacer copia de
seguridad de bases de datos de SQL Server con Visual Basic 2005
¿Por qué solo para Visual C# 2005?
Bueno, en realidad vale para cualquier versión de Visual C#,
lo que pasa es que en este código utilizo una cosa que es exclusiva de
Visual C# 2005: la clase
SqlConnectionStringBuilder que sirve para "crear" cadenas de
conexiones a bases de datos de forma más simple.
Pero si quieres usar este código con alguna versión anterior de C#,
simplemente quita el uso de esa clase y crea la cadena de conexión como
siempre lo has hecho.
Y ya sin más preámbulos, veamos la aplicación de ejemplo y el código que
hay que usar para hacer una copia de seguridad de una base de SQL Server
mediante código.
En la figura 1 puedes ver el formulario en tiempo de diseño.
Figura 1. El formulario en tiempo de diseño
Ahí se indica el servidor de SQL Server que queremos usar, el nombre de la
base de datos de la que queremos hacer la copia y el nombre del fichero en
el que se hará la copia de seguridad.
Al pulsar en el botón "Hacer backup" se ejecutará el
siguiente código que es el encargado de hacer esa copia de seguridad. El
código de ese método es el siguiente:
string sBackup = "BACKUP DATABASE " + this.txtBase.Text +
" TO DISK = N'" + this.txtBackup.Text +
"' WITH NOFORMAT, NOINIT, NAME =N'" + this.txtBase.Text +
"' -Full Database Backup',SKIP, STATS = 10";
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
csb.DataSource = this.txtServidor.Text;
csb.InitialCatalog = this.txtBase.Text;
csb.IntegratedSecurity = true;
using(SqlConnection con = new SqlConnection(csb.ConnectionString))
{
try
{
con.Open();
SqlCommand cmdBackUp = new SqlCommand(sBackup, con);
cmdBackUp.ExecuteNonQuery();
MessageBox.Show("Se ha creado un BackUp de La base de datos satisfactoriamente",
"Copia de seguridad de base de datos",
MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message,
"Error al copiar la base de datos",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Y esto es todo.
En este ejemplo, se utilizan las credenciales del usuario de Windows, ni
que decir tiene, que si ese código lo usas con un usuario que no tiene los
"permisos" suficientes, la copia de seguridad fallará.
Una recomendación
Si el fichero que indicas en Backup ya existe, no se
sobrescribe, ya que el sistema de copia de seguridad de SQL Server lo que
hace es "agregarla", es decir, si ese fichero ya existe, y por ejemplo ocupa
40 MB, al hacer una segunda copia de seguridad en ese mismo fichero, el
tamaño crecerá hasta el doble, es decir, se van añadiendo las nuevas copias
de seguridad que se indiquen. Por tanto, si no es esa tu intención, lo que
te recomiendo es que después de hacer la copia de seguridad lo copies a otro
sitio o le cambies el nombre a las nuevas copias.
Espero que te sea de utilidad.
Nos vemos.
Guillermo
P.S.
Pulsa aquí si quieres ver cómo
restaurar una base de datos de SQL Server a partir de una copia (backup).
Espacios de nombres usados en el código de este artículo:
System.Data.SqlClient
Artículos y colaboraciones publicadas antes de 2012
Nota:
La mayoría del código de ejemplo, contienen más cosas de las indicadas en el título o link, por tanto te recomiendo que le eches un vistazo por si está lo
que realmente andas buscando.
También quiero recordarte que en la mayoría de los casos, al menos en los links con fecha 15 de enero 2002 y posteriores en los que "el Guille" es el autor
(yo), el mismo código se muestra tanto para Visual Basic como para C#, salvo casos muy concretos en los que se explican cosas específicas de cada lenguaje...
o porque no he tenido tiempo de convertirlo, je, je.
Notas:
-El código mostrado en estas páginas es de libre uso, el único requisito para poder usarlo, es citar la procedencia del mismo.
-Para poder usar los tutoriales o los artículos, por ejemplo para publicarlos en otro sitio, tendrás que pedir autorización al autor antes de
publicarlos (completo o en parte), y si es una colaboración, mándame copia de esa autorización a mi cuenta de correo: mensaje EN elguille.info.
Gracias.