Respaldar Bases de Datos de SQL Server Con Visual Basic NET

12
Respaldar bases de datos de SQL Server con Visual Basic .NET Por Juan Carlos Rojas Vargas <Kubical ORG, Costa Página 1 de 6 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

Transcript of Respaldar Bases de Datos de SQL Server Con Visual Basic NET

Page 1: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

Respaldar bases de datos de SQL Server con Visual Basic .NETPor Juan Carlos Rojas Vargas <Kubical ORG, Costa

Página 1 de 6

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 red2. 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 servidor4. 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

Page 2: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

Respaldar bases de datos de SQL Server con Visual Basic .NETPor Juan Carlos Rojas Vargas <Kubical ORG, Costa

Página 2 de 6

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 seleccionada6. Informar al usuario de lo sucedido

Page 3: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

Página 3 de 6

Respaldar bases de datos de SQL Server con Visual Basic .NETPor Juan Carlos Rojas Vargas <Kubical ORG, Costa

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 VALORComboBox cboServidor DropDownStyle DropDownList

cboBD DropDownStyle DropDownListTextBox txtUsuario

txtContrasenatxtDestino ReadOnly Trae

BackColor WindowButton btnConectar Text C&onectar

btnRespaldar Text &RespaldarbtnCerrar Text &Cerrar

Page 4: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

Página 4 de 6

Respaldar bases de datos de SQL Server con Visual Basic .NETPor Juan Carlos Rojas Vargas <Kubical ORG, Costa

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.ConnectionInfo2. Microsoft.SQLServer.Smo3. 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.SmoImports 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)NextIf 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

Page 5: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

Página 5 de 6

Respaldar bases de datos de SQL Server con Visual Basic .NETPor Juan Carlos Rojas Vargas <Kubical ORG, Costa verifica, ya que en muchos casos hay personas que la dejan en blanco; un gran riesgo de seguridad).

Page 6: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

Página 6 de 6

Respaldar bases de datos de SQL Server con Visual Basic .NETPor Juan Carlos Rojas Vargas <Kubical ORG, Costa

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 <> "" ThenDim 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.TrimFor Each bdBase As Database In svrServidor.Databases

Me.cboBD.Items.Add(bdBase.Name)

Else

NextEnd WithIf Me.cboBD.Items.Count > 0 Then Me.cboBD.SelectedIndex = 0

Catch ex As ExceptionMe.cboBD.Items.Clear()MsgBox(ex.Message,

MsgBoxStyle.Critical) End Try

If Me.cboServidor.Text.Trim = "" ThenIf MsgBox("No se encontraron servidores SQL ¿Desea " _& "actualizar la lista?", MsgBoxStyle.Exclamation + _ MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then

Call Me.psServidores()End If

ElseMsgBox("Por favor, digite el nombre de usuario.", _ MsgBoxStyle.Critical)Me.txtUsuario.Clear() : Me.txtUsuario.Focus()

End IfEnd 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

Page 7: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

Dim strDestino As String = .SelectedPath.ToStringIf Not strDestino.EndsWith("\") Then

strDestino = strDestino & "\"End IfMe.txtDestino.Text = strDestino

End IfEnd 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 <> "" ThenDim 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 & ";")

TryDim 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)

Else

coSQL.ExecuteNonQuery()MsgBox("Respaldo creado correctamente :)", _MsgBoxStyle.Information)

Catch ex As ExceptionMsgBox(ex.Message, MsgBoxStyle.Critical)

Finally conConexion.Close()

End Try

If Me.cboBD.Text = "" ThenIf Me.cboServidor.Text <> "" Then

MsgBox("Por favor, conéctese al servidor.", _MsgBoxStyle.Critical) Me.btnConectar.Focus()

End IfElse

Page 8: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

MsgBox("Especifique el destino del respaldo.", _ MsgBoxStyle.Critical)Me.btnExaminar.Focus()

End IfEnd 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 VargasKubical ORG, Costa Rica

Page 9: Respaldar Bases de Datos de SQL Server Con Visual Basic NET

E-mail: ju a n ca r l o sr @m s n. co m