Está en la página 1de 6

Respaldar bases de datos de SQL Server con Visual Basic .

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

Introduccin Generalmente cuando se desarrolla una aplicacin 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 notificacin por correo electrnico. De esta forma dejamos de lado el trabajo de incluir en nuestro proyecto un mdulo u otra aplicacin externa para llevar a cabo los respaldos de informacin. Personalmente, la desventaja de crear un plan de mantenimiento es que ste se ejecutar con base a los parmetros que le hayamos establecido y no cuando el cliente desee crear un respaldo de su base de datos. Tambin, 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 aplicacin) tenga un poco de conocimientos de SQL Server, lo cual, si el mismo no cuenta con los conocimientos, significara realizar una capacitacin en esa rea y como consecuencia perderamos tiempo y nuestro cliente deber desembolsar ms dinero. Este pequeo 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 tecnologa .NET es posible crear planes de mantenimiento desde nuestra aplicacin, pero este no es nuestro caso, ya que lo haremos directamente con Transact-SQL.

Pasos para crear un respaldo desde nuestra aplicacin Esta es una breve lista de los pasos que debemos llevar a cabo para desarrollar una aplicacin sencilla que nos permita generar respaldos de forma fcil (pensado para usuarios finales sin muchos conocimientos): 1. 2. 3. 4. Obtener la lista de servidores SQL de la red Suministrar los datos de conexin (entindase como usuario y contrasea) Obtener el nombre de las bases de datos almacenadas en el servidor Indicar la ubicacin 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 (tambin incluye la extensin .bak), por ejemplo: kubicalorg20090320-134706.bak) 5. Crear el respaldo de la base de datos seleccionada 6. Informar al usuario de lo sucedido

Pgina 1 de 6

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

Creacin de la interfaz de la aplicacin En la siguiente imagen puede observarse la apariencia de la aplicacin:

Cada uno le da la apariencia que desee, o que crea ms conveniente para que el usuario se sienta ms cmodo. Lo importante es que, para desarrollar el ejemplo, la interfaz cuente con todos los controles que se muestran en la imagen anterior. A continuacin se presenta una lista con los tipos, nombres y propiedades de los controles ms importantes que vamos a utilizar:

LISTA DE CONTROLES A UTILIZAR TIPO ComboBox TextBox NOMBRE cboServidor cboBD txtUsuario txtContrasena txtDestino btnConectar btnRespaldar btnCerrar PROPIEDAD DropDownStyle DropDownStyle VALOR DropDownList DropDownList

Button

ReadOnly BackColor Text Text Text

Trae Window C&onectar &Respaldar &Cerrar

Pgina 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 cdigo 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 opcin Agregar referencia, ubicada en el men Proyecto. En el formulario que se nos presenta buscamos el nombre de las mencionadas anteriormente y listo. Tambin, vamos a agregar al inicio de nuestra clase (o formulario) las siguientes lneas:
Imports Microsoft.SqlServer.Management.Smo Imports system.Data.SqlClient

Con todo esto listo, comenzaremos a escribir el cdigo necesario para que la aplicacin 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 botn btnConectar. Por medio del siguiente cdigo verificamos que se haya seleccionado un servidor SQL y proporcionado el nombre de usuario (la contrasea no se verifica, ya que en muchos casos hay personas que la dejan en blanco; un gran riesgo de seguridad).

Pgina 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 cdigo 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 aplicacin obtiene el nombre de los servidores SQL encontrados y adems, nos muestra el nombre de las bases de datos almacenadas en cualquiera de ellos. Vamos a agregar el cdigo para el evento Click del botn 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

Pgina 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 aplicacin; lo nico que nos falta es crear el respaldo de la base de datos seleccionada por el usuario. Para ello vamos a crear una conexin al servidor SQL y ejecutar el comando de Transact-SQL que nos permitir crearlo. Adems, realizaremos una verificacin 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 automticamente, 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, conctese al servidor.", _ MsgBoxStyle.Critical) Me.btnConectar.Focus() End If Else

Pgina 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 artculo, el cdigo no est comentado ni tampoco se da mucha informacin acerca de para que sirve cada cosa; pero en fin, espero que haya sido de su ayuda. El cdigo ha sido desarrollado de la forma ms simple para que todos los entiendan. Para obtener ms informacin acerca del comando BACKUP de Transact-SQL, puede consultar la siguiente informacin en la ayuda de SQL Server 2005: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/89a4658a-62f1-42898982-f072229720a1.htm Esto lo he dejado para el final, el ejemplo se ha desarrollado utilizando Visual Basic .NET 2005 y SQL Server 2005, pero debera funcionar con cualquier versin de las aplicaciones mencionadas. Si usted tiene dudas acerca de lo mencionado en este documento, sugerencias, correcciones u otras inquietudes, por favor, pngase en contacto con el autor por medio de correo electrnico. 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

Pgina 6 de 6

También podría gustarte