miércoles, 17 de febrero de 2010

Hacer copia de seguridad (Backup) de bases de datos de SQL Server con Visual Basic 2005

¿Por qué solo para Visual Basic 2005?

Bueno, en realidad vale para cualquier versión de Visual Basic para .NET, lo que pasa es que en este código utilizo dos cosas que son exclusivas de Visual Basic 2005, una de ellas es la clase SqlConnectionStringBuilder que sirve para "crear" cadenas de conexiones a bases de datos de forma más simple. La otra característica es que utiliza la instrucción Using para agrupar el objeto SqlConnection, de forma que si se produce un error no se quede la conexión abierta.
Si quieres usar este código con alguna versión anterior de Visual Basic para .NET, simplemente quita el uso de esa clase y crea la cadena de conexión como siempre lo has hecho y para el uso de la conexión en el bloque Using, pues... también lo puedes hacer como lo has estado haciendo siempre...

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
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:

System.Data.SqlClient
Dim sBackup As String = "BACKUP DATABASE " & Me.txtBase.Text & _
                        " TO DISK = N'" & Me.txtBackup.Text & _
                        "' WITH NOFORMAT, NOINIT, NAME =N'" & Me.txtBase.Text & _
                        "-Full Database Backup',SKIP, STATS = 10"
 
Dim csb As New SqlConnectionStringBuilder
csb.DataSource = Me.txtServidor.Text
csb.InitialCatalog = Me.txtBase.Text
csb.IntegratedSecurity = True
 
Using con As New SqlConnection(csb.ConnectionString)
    Try
        con.Open()
 
        Dim cmdBackUp As New SqlCommand(sBackup, con)
 
        cmdBackUp.ExecuteNonQuery()
 
        MessageBox.Show("Se ha creado un BackUp de La base de datos satisfactoria
                        "Copia de seguridad de base de datos", _
                        MessageBoxButtons.OK, MessageBoxIcon.Information)
 
        con.Close()
 
    Catch ex As Exception
        MessageBox.Show(ex.Message, _
                        "Error al copiar la base de datos", _
                        MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
End Using
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.

2 comentarios:

  1. Excelente aporte, gracias! lo he probado y me ha funcionado perfectamente... Ahora solo me gustaria saber como hago para adaptarlo para MySql, ya que estoy haciendo una aplicación con VB 2005 y MySql y debo hacer backup de la BD y no he podido utilizar este código, por problemas de sintaxis... Gracias de antemano

    ResponderEliminar
  2. Coincido, excelente aporte.. muy buen blog. muy completo

    ResponderEliminar