martes, 2 de marzo de 2010

Restaurar una base de datos de SQL Server desde código (VB)

Hace unos meses te mostré cómo hacer una copia de seguridad de una base de datos de SQL Server.
En esta ocasión el código que te muestro es para lo contrario, es decir, para restaurar una copia (backup) que ya tengas.

Nota:
Decirte que en las pruebas que he hecho, solo una base de datos se ha resistido a que la restaure... el error que me daba era de "TimeOut", pero ni cambiándole el valor de Time Out se ha solucionado el problema... te lo digo por si te pasa que no me vengas con quejas ni con preguntas de cómo solucionarlo, que si yo lo supiera, pues ya lo habría comentado... así que... si te surge ese problema, lo mejor es que lo comentes en mis foros a ver si alguien (más experto en SQL que yo), sabe la respuesta.
El código es bien simple, y esto solo vale para Visual Basic 2005 o cualquier versión superior, pero yo solo lo he probado con Visual Basic 2005 y Visual Basic 2008.
De todas formas, si quieres usarlo en alguna versión anterior, solo tendrás que cambiar la forma de conectarse al servidor de SQL Server.

'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
Option Strict On
 
Imports System
Imports Microsoft.VisualBasic
Imports System.Windows.Forms
 
Imports System.Data.SqlClient
 
Public Class Form1
 
    Private Sub btnRestore_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnRestore.Click
        Me.btnRestore.Enabled = False
        Me.btnRestore.Text = "Restaurando..."
        Me.btnRestore.Refresh()
 
        Dim sBackup As String = "RESTORE DATABASE " & Me.txtBase.Text & _
                                " FROM DISK = '" & Me.txtBackup.Text & "'" & _
                                " WITH REPLACE"
 
        Dim csb As New SqlConnectionStringBuilder
        csb.DataSource = Me.txtServidor.Text
        ' Es mejor abrir la conexión con la base Master
        csb.InitialCatalog = "master"
        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 restaurado la copia de la base de datos.", _
                                "Restaurar base de datos", _
                                MessageBoxButtons.OK, MessageBoxIcon.Information)
 
                con.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message, _
                                "Error al restaurar la base de datos", _
                                MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End Using
 
        Me.btnRestore.Text = "Restaurar copia"
        Me.btnRestore.Enabled = True
        Me.btnRestore.Refresh()
 
    End Sub
End Class

No hay comentarios:

Publicar un comentario