Anda di halaman 1dari 6

Respaldar bases de datos de SQL Server con Visual Basic .

NET
Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Introducción

Generalmente cuando se desarrolla una aplicación para un cliente, una de las


preguntas importantes que se nos hacen es: ¿Y los respaldos de la base de datos?

Con SQL Server tenemos la posibilidad de crear planes de mantenimiento a los que
podemos indicarles ciertas opciones, como por ejemplo, la notificación por correo
electrónico. De esta forma dejamos de lado el trabajo de incluir en nuestro
proyecto un módulo u otra aplicación externa para llevar a cabo los respaldos de
información.

Personalmente, la desventaja de crear un plan de mantenimiento es que éste se


ejecutará con base a los parámetros que le hayamos establecido y no cuando el
cliente desee crear un respaldo de su base de datos. También, para modificar y/o
ejecutar un plan de mantenimiento (en el momento que se decida), es necesario
que el cliente (o el usuario final de la aplicación) tenga un poco de conocimientos
de SQL Server, lo cual, si el mismo no cuenta con los conocimientos, significaría
realizar una capacitación en esa área y como consecuencia perderíamos tiempo y
nuestro cliente deberá desembolsar más dinero.

Este pequeño documento se ha creado para indicar a los desarrolladores como


llevar a cabo un respaldo de una base de datos utilizando Transact-SQL y Visual
Basic .NET. Cabe mencionar que, actualmente con la tecnología .NET es posible
crear planes de mantenimiento desde nuestra aplicación, pero este no es nuestro
caso, ya que lo haremos directamente con Transact-SQL.

Pasos para crear un respaldo desde nuestra aplicación

Esta es una breve lista de los pasos que debemos llevar a cabo para desarrollar
una aplicación sencilla que nos permita generar respaldos de forma fácil (pensado
para usuarios finales sin muchos conocimientos):

1. Obtener la lista de servidores SQL de la red


2. Suministrar los datos de conexión (entiéndase como usuario y contraseña)
3. Obtener el nombre de las bases de datos almacenadas en el servidor
4. Indicar la ubicación y el nombre del respaldo (generalmente el nombre de
un respaldo es: el nombre de la base de datos con la fecha y la hora en que
se realiza (también incluye la extensión .bak), por ejemplo: kubicalorg-
20090320-134706.bak)
5. Crear el respaldo de la base de datos seleccionada
6. Informar al usuario de lo sucedido

Página 1 de 6
Respaldar bases de datos de SQL Server con Visual Basic .NET
Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Creación de la interfaz de la aplicación

En la siguiente imagen puede observarse la apariencia de la aplicación:

Cada uno le da la apariencia que desee, o que crea más conveniente para que el
usuario se sienta más cómodo. Lo importante es que, para desarrollar el ejemplo,
la interfaz cuente con todos los controles que se muestran en la imagen anterior.

A continuación se presenta una lista con los tipos, nombres y propiedades de los
controles más importantes que vamos a utilizar:

LISTA DE CONTROLES A UTILIZAR

TIPO NOMBRE PROPIEDAD VALOR


ComboBox cboServidor DropDownStyle DropDownList
cboBD DropDownStyle DropDownList
TextBox txtUsuario
txtContrasena
txtDestino ReadOnly Trae
BackColor Window
Button btnConectar Text C&onectar
btnRespaldar Text &Respaldar
btnCerrar Text &Cerrar

Página 2 de 6
Respaldar bases de datos de SQL Server con Visual Basic .NET
Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Programando la utilidad de respaldos

Ya que tenemos lista la interfaz procederemos a agregar el código para darle vida
a nuestro programa. Pero antes, debemos agregar las siguientes referencias:

1. Microsoft.SQLServer.ConnectionInfo
2. Microsoft.SQLServer.Smo
3. Microsoft.SQLServer.SmoEnum

Para agregar las referencias podemos hace clic en la opción Agregar referencia,
ubicada en el menú Proyecto. En el formulario que se nos presenta buscamos el
nombre de las mencionadas anteriormente y listo.

También, vamos a agregar al inicio de nuestra clase (o formulario) las siguientes


líneas:

Imports Microsoft.SqlServer.Management.Smo
Imports system.Data.SqlClient

Con todo esto listo, comenzaremos a escribir el código necesario para que la
aplicación comience a funcionar. Lo primero que programaremos será un
procedimiento con el cual vamos a obtener el nombre de los servidores SQL.

Private Sub psServidores()


Me.cboServidor.Items.Clear()
For Each svrServidor As RegisteredServers.RegisteredServer In _
SmoApplication.SqlServerRegistrations.EnumRegisteredServers
Me.cboServidor.Items.Add(svrServidor.Name)
Next
If Me.cboServidor.Items.Count > 0 Then _
Me.cboServidor.SelectedIndex = 0
End Sub

Para cargar nuestro ComboBox con la lista de servidores, llamamos al


procedimiento psServidores en el evento Load del formulario:

Private Sub frmPrincipal_Load(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles MyBase.Load
Call Me.psServidores()
End Sub

Ahora vamos a programar el evento Click del botón btnConectar. Por medio del
siguiente código verificamos que se haya seleccionado un servidor SQL y
proporcionado el nombre de usuario (la contraseña no se verifica, ya que en
muchos casos hay personas que la dejan en blanco; un gran riesgo de seguridad).

Página 3 de 6
Respaldar bases de datos de SQL Server con Visual Basic .NET
Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Con el siguiente código obtenemos el nombre de las bases de datos almacenadas


en el servidor seleccionado por el usuario:

Private Sub btnConectar_Click(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles btnConectar.Click
If Me.cboServidor.Text <> "" And Me.txtUsuario.Text.Trim <> "" Then
Dim svrServidor As New Server(Me.cboServidor.Text)

Me.cboBD.Items.Clear()
Try
With svrServidor
.ConnectionContext.LoginSecure = False
.ConnectionContext.Login = Me.txtUsuario.Text.Trim
.ConnectionContext.Password = Me.txtContrasena.Text.Trim
For Each bdBase As Database In svrServidor.Databases
Me.cboBD.Items.Add(bdBase.Name)
Next
End With
If Me.cboBD.Items.Count > 0 Then Me.cboBD.SelectedIndex = 0
Catch ex As Exception
Me.cboBD.Items.Clear()
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
Else
If Me.cboServidor.Text.Trim = "" Then
If MsgBox("No se encontraron servidores SQL ¿Desea " _
& "actualizar la lista?", MsgBoxStyle.Exclamation + _
MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Call Me.psServidores()
End If
Else
MsgBox("Por favor, digite el nombre de usuario.", _
MsgBoxStyle.Critical)
Me.txtUsuario.Clear() : Me.txtUsuario.Focus()
End If
End If
End Sub

Perfecto, ya nuestra aplicación obtiene el nombre de los servidores SQL


encontrados y además, nos muestra el nombre de las bases de datos almacenadas
en cualquiera de ellos.

Vamos a agregar el código para el evento Click del botón btnExaminar, así
permitiremos al usuario elegir el directorio donde se almacenará el respaldo:

Private Sub btnExaminar_Click(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles btnExaminar.Click
Dim dlgDestino As New FolderBrowserDialog

With dlgDestino
.Description = "Seleccione el directorio de destino:"
If .ShowDialog = Windows.Forms.DialogResult.OK Then

Página 4 de 6
Respaldar bases de datos de SQL Server con Visual Basic .NET
Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

Dim strDestino As String = .SelectedPath.ToString


If Not strDestino.EndsWith("\") Then
strDestino = strDestino & "\"
End If
Me.txtDestino.Text = strDestino
End If
End With
End Sub

Casi lista la aplicación; lo único que nos falta es crear el respaldo de la base de
datos seleccionada por el usuario. Para ello vamos a crear una conexión al servidor
SQL y ejecutar el comando de Transact-SQL que nos permitirá crearlo. Además,
realizaremos una verificación para determinar si el usuario ha seleccionado una
base de datos y especificado el directorio de destino del respaldo.

El nombre del respaldo será asignado automáticamente, el formato será el


siguiente: nombreoriginal-fecha-hora.bak.

Private Sub btnRespaldar_Click(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles btnRespaldar.Click
If Me.cboBD.Text <> "" And Me.txtDestino.Text.Trim <> "" Then
Dim conConexion As New SqlConnection("data source=" _
& Me.cboServidor.Text & ";user id=" & Me.txtUsuario.Text.Trim _
& ";password=" & Me.txtContrasena.Text.Trim & ";initial " _
& "catalog=" & Me.cboBD.Text & ";")

Try
Dim strNombre_Respaldo As String = Me.cboBD.Text _
& "-" & Date.Now.ToString("yyyyMMdd") & "-" _
& Date.Now.ToString("HHmmss") & ".bak"

conConexion.Open()
Dim coSQL As New SqlCommand("BACKUP DATABASE [" _
& Me.cboBD.Text & "] TO DISK='" & Me.txtDestino.Text _
& strNombre_Respaldo & "'", conConexion)

coSQL.ExecuteNonQuery()
MsgBox("Respaldo creado correctamente :)", _
MsgBoxStyle.Information)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
Finally
conConexion.Close()
End Try
Else
If Me.cboBD.Text = "" Then
If Me.cboServidor.Text <> "" Then
MsgBox("Por favor, conéctese al servidor.", _
MsgBoxStyle.Critical)
Me.btnConectar.Focus()
End If
Else

Página 5 de 6
Respaldar bases de datos de SQL Server con Visual Basic .NET
Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Rica>

MsgBox("Especifique el destino del respaldo.", _


MsgBoxStyle.Critical)
Me.btnExaminar.Focus()
End If
End If
End Sub

Notas finales del autor

Este es el final del artículo, el código no está comentado ni tampoco se da mucha


información acerca de para que sirve cada cosa; pero en fin, espero que haya sido
de su ayuda. El código ha sido desarrollado de la forma más simple para que todos
los entiendan.

Para obtener más información acerca del comando BACKUP de Transact-SQL,


puede consultar la siguiente información en la ayuda de SQL Server 2005:

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/89a4658a-62f1-4289-
8982-f072229720a1.htm

Esto lo he dejado para el final, el ejemplo se ha desarrollado utilizando Visual Basic


.NET 2005 y SQL Server 2005, pero debería funcionar con cualquier versión de las
aplicaciones mencionadas.

Si usted tiene dudas acerca de lo mencionado en este documento, sugerencias,


correcciones u otras inquietudes, por favor, póngase en contacto con el autor por
medio de correo electrónico.

Este documento puede distribuirse completa o parcialmente por cualquier medio,


siempre y cuando se mencionen los datos del autor.

Juan Carlos Rojas Vargas


Kubical ORG, Costa Rica

E-mail: juancarlosr@msn.com

Página 6 de 6

Anda mungkin juga menyukai