Restaurar Base de Datos de SQL Server desde el Visual Basic .Net

Problema: Necesito restaurar, por medio de un programa, una base de datos del SQL Server.
Solución: Encontré un mundillo de cosas en la web, así que decidí unificarlo todo.
Tengo un procedimiento, el cual utilizo para restaurar la base de datos.

Public Sub RestaurarBD(ByVal base As String, ByVal ruta As String, ByVal servidor As String, ByVal ArchivoMdf As String, _
ByVal ArchivoLdf As String, ByVal RutaMdf As String, ByVal RutaLdf As String)
 Dim sBackup As String = "RESTORE DATABASE " & base & _
 " FROM DISK = '" & ruta & "'" & _
 " WITH REPLACE, " & _
 "MOVE '" & ArchivoMdf & "' TO '" & RutaMdf & ".mdf', " & _
 "MOVE '" & ArchivoLdf & "' TO '" & RutaLdf & ".ldf'"

 Dim csb As New SqlConnectionStringBuilder
 csb.DataSource = servidor
 ' 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
End Sub

Hay que recordar que si son rutas locales la sentencia sería, por ejemplo, C:\Archivos de Programa\Microsoft SQL Server\MSSQL\Data Pero si son rutas de red la sentencia sería, por ejemplo, \\Servidor1\Carpeta\Database

Se necesita saber el archivo físico del mdf y ldf, generalmente se llaman igual que la base de datos, por ejemplo, si restauro la base llamada Clientes, los archivos serían Clientes.mdf y Clientes.lfd respectivamente. Pero OJO, no siempre se llaman así, por lo que deben verificar el nombre de cada archivo. Así mismo, los archivos mdf y ldf suele ir en la misma carpeta en donde se encuentra la Data del SQL Server, pero esto no es una regla exacta, sobre todo si se trabaja en una red local, por lo que deben también verificar esto.

Tener en cuenta la conexión, el que pongo de ejemplo es un genérico que sirve cuando la base de datos es local, de ser un servidor en red, deberá tener su propio usuario y contraseña de autenticación.

Para este ejemplo, utilizaré la base de datos llamada Clientes, el cual he sacado una copia de seguridad desde el SQL Server llamada Clientes.bak

base: es el nombre lógico de la base de datos, en este caso sería Clientes
ruta: es el lugar y nombre de la copia de seguridad, sería C:\Carpeta\Clientes.bak
ArchivoMdf: es el nombre del archivo .mdf, sería Clientes.mdf
RutaMdf: es el lugar y el nombre del archivo .mdf, sería C:\Archivos de Programa\Microsoft SQL Server\MSSQL\Data\Clientes.mdf
ArchivoLdf: es el nombre del archivo .ldf, sería Clientes.ldf
RutaLdf: es el lugar y el nombre del archivo .ldf, sería C:\Archivos de Programa\Microsoft SQL Server\MSSQL\Data\Clientes.ldf

La manera de usarlo sería la siguiente

RestaurarBD(base, ruta, servidor, ArchivoMdf, ArchivoLdf, RutaMdf, RutaLdf)

El proyecto con el código de ejemplo se puede descargar desde aquí: Ejemplo