C#: Respaldar y restaurar MSSQLServer DB

Aquí les dejo un codigo en C# muy útil para cuando hagan sus aplicaciones con bases de datos en SQL server puedan respaldar la base de datos y restaurarla.

Codigo para un botón respaldar:

 

private void button1_Click(object sender, EventArgs e)

      {
          bool desea_respaldar = true;
          //poner cursor de relojito mintras respalda
          Cursor.Current = Cursors.WaitCursor;
           if (Directory.Exists(@"c:\ Respaldo"))
              {
                  if (File.Exists(@"c:\ Respaldo\resp.bak"))
                  {
                      if (MessageBox.Show(@"Ya habia un respaldo anteriormente ¿desea remplazarlo?", "Respaldo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                      {
                          File.Delete(@"c:\ Respaldo\resp.bak");
                      }
                      else
                          desea_respaldar = false;
                  }
              }
              else
                  Directory.CreateDirectory(@"c:\ Respaldo");
              if (desea_respaldar)
              {
                  //esto puede ser un método aparte de conexion a la base de datos-----------
                  SqlConnection connect;
                  string con = "Data Source = localhost; Initial Catalog=BD ;Integrated Security = True;";
                  connect = new SqlConnection(con);
                  connect.Open();
                  //-------------------------------------------------------------------------
                  //esto puede ser un método aparte para ejecutar comandos SQL---------------
                  SqlCommand command;
                  command = new SqlCommand(@"backup database BD to disk ='c:\ Respaldo\resp.bak' with init,stats=10", connect);
                  command.ExecuteNonQuery();
                  //-------------------------------------------------------------------------
                  connect.Close();
                  MessageBox.Show("El Respaldo de la base de datos fue realizado satisfactoriamente", "Respaldo", MessageBoxButtons.OK, MessageBoxIcon.Information);
              }
      }
Código para un botón restaurar:
private void button5_Click(object sender, EventArgs e)

     {
         //poner cursor de relojito
         Cursor.Current = Cursors.WaitCursor;
         try
         {
             if (File.Exists(@"c:\ Respaldo\resp.bak"))
             {
                 if (MessageBox.Show("¿Está seguro de restaurar?", "Respaldo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                 {
                     //esto puede ser un método aparte de conexion a la base de datos-----------
                     SqlConnection connect;
                     string con = "Data Source = localhost; Initial Catalog=master ;Integrated Security = True;";
                     connect = new SqlConnection(con);
                     connect.Open();
                     //--------------------------------------------------------------------------
                     //esto puede ser un método aparte para ejecutar comandos SQL----------------
                     SqlCommand command;
                     command = new SqlCommand("use master", connect);
                     command.ExecuteNonQuery();
                     command = new SqlCommand(@"restore database BD1 from disk = 'c:\ Respaldo\resp.bak'", connect);
                     command.ExecuteNonQuery();
                     //--------------------------------------------------------------------------
                     connect.Close();
                     MessageBox.Show("Se ha restaurado la base de datos", "Restauración", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 }
             }
             else
                 MessageBox.Show(@"No haz hecho ningun respaldo anteriormente (o no está en la ruta correcta)", "Restauracion", MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
         catch (Exception exp)
         {
             MessageBox.Show(exp.Message);
         }
     }
Obviamente esta es la forma basica, pueden agregar mas try y catch para prevenir fallas o cambiar la ruta donde se almacena y restaura la base de datos de forma dinamica con un OpenFileDialog u otras formas. Espero les sea útil.