2 using System.Collections.Generic;
7 using System.Data.SqlClient;
30 private string _cGrupo =
string.Empty;
35 public string _RutaLocal
46 private string _cRutaLocal =
string.Empty;
51 public string _Ejercicio
62 private string _cEjercicio =
string.Empty;
67 public string _ErrorMessage
71 return _cErrorMessage;
75 _cErrorMessage = value;
78 private string _cErrorMessage =
string.Empty;
83 public string _GrupoOrigenBackup
87 return _c_GrupoOrigenBackup;
91 _c_GrupoOrigenBackup = value;
94 private string _c_GrupoOrigenBackup =
string.Empty;
110 private string _cSufijo =
string.Empty;
115 public List<string> _ListaDBRestauradas =
new List<string>();
121 public bool _LimpiarEjercicios {
get;
set; } =
false;
126 public List<string> _EjerciciosMantener {
get;
set; } =
new List<string>();
132 public List<string> _EjerciciosCopiados {
get;
set; } =
new List<string>();
135 public delegate
void _ActualizarEstadoProgreso(
string tcEstado,
int tnPorcentaje);
164 public Backups(
string tcGrupo,
string tcRutaLocal,
string tcEjercicio,
string tcGrupoBackup =
"",
string tcSufijoDB =
"",
bool tbLimpiarEjercicios =
false, List<string> toEjerciciosMantener = null)
167 _RutaLocal = tcRutaLocal;
168 _Ejercicio = tcEjercicio;
169 _GrupoOrigenBackup = tcGrupoBackup;
170 _Sufijo = tcSufijoDB;
171 _LimpiarEjercicios = tbLimpiarEjercicios;
172 _EjerciciosMantener = toEjerciciosMantener;
174 _ListaDBRestauradas =
new List<string>();
185 if (!Directory.Exists(_RutaLocal))
186 Directory.CreateDirectory(_RutaLocal);
189 lbOk = DB._DbBackup(
"EUROWINSYS", _RutaLocal);
193 _ErrorMessage = DB.Error_Message;
194 throw new Exception(
"Error al ejecutar la copia de los datos: " + _ErrorMessage);
205 DataTable ldtEjercici =
new DataTable();
206 DataTable ldtModulos =
new DataTable();
207 string lcSql =
string.Empty;
210 if (!Directory.Exists(_RutaLocal))
211 Directory.CreateDirectory(_RutaLocal);
213 string lcDbComunes =
"COMU" + _Grupo;
216 lbOk = DB._DbBackup(lcDbComunes, _RutaLocal);
220 _ErrorMessage = DB.Error_Message;
221 throw new Exception(
"Error al ejecutar la copia de los datos: " + _ErrorMessage);
225 lcSql =
"select conexion, [any] as anyo from " + DB.SQLDatabaseReal(lcDbComunes,
"EJERCICI");
226 DB.SQLExec(lcSql, ref ldtEjercici);
228 if (ldtEjercici != null && ldtEjercici.Rows.Count > 0)
230 foreach (DataRow rowEjer
in ldtEjercici.Rows)
233 if (_Ejercicio !=
"Todos")
235 if (Convert.ToString(rowEjer[
"anyo"]).Trim() == _Ejercicio.Trim())
237 lbOk = DB._DbBackup(Convert.ToString(rowEjer[
"conexion"]).Trim(), _RutaLocal);
240 _ErrorMessage = DB.Error_Message;
241 throw new Exception(
"Error al ejecutar la copia de los datos: " + _ErrorMessage);
248 if (DB.SQLDatabaseExistStrict(Convert.ToString(rowEjer[
"anyo"]).Trim()))
250 lbOk = DB._DbBackup(Convert.ToString(rowEjer[
"conexion"]).Trim(), _RutaLocal);
253 _ErrorMessage = DB.Error_Message;
254 throw new Exception(
"Error al ejecutar la copia de los datos: " + _ErrorMessage);
256 _EjerciciosCopiados.Add(Convert.ToString(rowEjer[
"anyo"]).Trim());
262 lcSql =
"select nom_conex from " + DB.SQLDatabaseReal(lcDbComunes,
"MODULOS");
263 DB.SQLExec(lcSql, ref ldtModulos);
265 if (ldtModulos != null && ldtModulos.Rows.Count > 0)
267 foreach (DataRow rowModulo
in ldtModulos.Rows)
270 lbOk = DB._DbBackup(Convert.ToString(rowModulo[
"nom_conex"]).Trim(), _RutaLocal);
273 _ErrorMessage = DB.Error_Message;
274 throw new Exception(
"Error al ejecutar la copia de los datos: " + _ErrorMessage);
286 DataTable ldtEjercici =
new DataTable();
287 DataTable ldtModulos =
new DataTable();
288 string lcSql =
string.Empty;
290 string lcDbComunes =
"COMU" + _Grupo;
291 string lcDbComunesOrigen =
"COMU" + _GrupoOrigenBackup;
293 _ActualizarMensajeProgreso(
"Limpiar bases de datos actuales", 20);
295 llOk = LimpiarGrupoActual(lcDbComunes);
297 _ActualizarMensajeProgreso(
"Restaurando Comunes: " + lcDbComunes +
" ... ", 20);
300 llOk = RestaurarComunes(lcDbComunesOrigen, lcDbComunes);
304 _ErrorMessage = DB.Error_Message;
309 llOk = RestaurarEjercicios(lcDbComunes);
312 llOk = RestaurarModulos(lcDbComunes);
315 _ActualizarMensajeProgreso(
"", 100);
324 private bool LimpiarGrupoActual(
string tcComunesGrupo)
326 DataTable ldtEjercici =
new DataTable();
327 DataTable ldtModulos =
new DataTable();
332 lcSql =
"select conexion, [any] as anyo from " + DB.SQLDatabaseReal(tcComunesGrupo,
"EJERCICI");
333 DB.SQLExec(lcSql, ref ldtEjercici);
335 if (ldtEjercici != null && ldtEjercici.Rows.Count > 0)
337 foreach (DataRow rowEjer
in ldtEjercici.Rows)
339 if (_Ejercicio !=
"Todos")
342 if (Convert.ToString(rowEjer[
"anyo"]).Trim() == _Ejercicio
343 || (_LimpiarEjercicios && Convert.ToInt32(rowEjer[
"anyo"]) > Convert.ToInt32(_Ejercicio)))
345 _ActualizarMensajeProgreso(
"Eliminando Ejercicio: " + Convert.ToString(rowEjer[
"conexion"]).Trim() +
" ... ", 20);
346 llOk = DB._DBRemove(
new SqlConnection(DB.Conexion), Convert.ToString(rowEjer[
"conexion"]).Trim());
352 if (_LimpiarEjercicios || (!_LimpiarEjercicios && !_EjerciciosMantener.Contains(Convert.ToString(rowEjer[
"anyo"]).Trim())))
354 _ActualizarMensajeProgreso(
"Eliminando Ejercicio: " + Convert.ToString(rowEjer[
"conexion"]).Trim() +
" ... ", 20);
355 llOk = DB._DBRemove(
new SqlConnection(DB.Conexion), Convert.ToString(rowEjer[
"conexion"]).Trim());
362 lcSql =
"select nom_conex from " + DB.SQLDatabaseReal(tcComunesGrupo,
"MODULOS");
363 DB.SQLExec(lcSql, ref ldtModulos);
365 if (ldtModulos != null && ldtModulos.Rows.Count > 0)
367 foreach (DataRow rowModulo
in ldtModulos.Rows)
369 _ActualizarMensajeProgreso(
"Eliminando Módulo: " + Convert.ToString(rowModulo[
"nom_conex"]).Trim() +
" ... ", 20);
370 llOk = DB._DBRemove(
new SqlConnection(DB.Conexion), Convert.ToString(rowModulo[
"nom_conex"]).Trim());
375 llOk = DB._DBRemove(
new SqlConnection(DB.Conexion), tcComunesGrupo);
387 private bool RestaurarComunes(
string tcDbComunesOrigen,
string tcDbComunes)
391 llOk = Backups._DbRestore(tcDbComunesOrigen, tcDbComunes, _RutaLocal, GrupoempTools._UserPropBdGrNuevo);
394 _ListaDBRestauradas.Add(tcDbComunes);
405 private bool RestaurarEjercicios(
string tcDbComunes)
408 string lcSql =
string.Empty;
409 string lcConexionNueva =
string.Empty;
410 DataTable ldtEjercici =
new DataTable();
413 lcSql =
"select conexion, [any] as anyo from " + DB.SQLDatabaseReal(tcDbComunes,
"EJERCICI");
414 DB.SQLExec(lcSql, ref ldtEjercici);
416 if (ldtEjercici != null && ldtEjercici.Rows.Count > 0)
418 foreach (DataRow rowEjer
in ldtEjercici.Rows)
421 if (_Ejercicio !=
"Todos")
423 if (Convert.ToString(rowEjer[
"conexion"]).Trim().Length > 2)
424 lcConexionNueva = Convert.ToString(rowEjer[
"conexion"]).Trim().Substring(0, Convert.ToString(rowEjer[
"conexion"]).Trim().Length - 2) + _Sufijo;
426 if (Convert.ToString(rowEjer[
"anyo"]).Trim() == _Ejercicio.Trim())
428 if (Convert.ToString(rowEjer[
"conexion"]).Trim().Length > 2)
429 lcConexionNueva = Convert.ToString(rowEjer[
"conexion"]).Trim().Substring(0, Convert.ToString(rowEjer[
"conexion"]).Trim().Length - 2) + _Sufijo;
432 _ErrorMessage =
"Error en la conexión de ejercicio";
436 _ActualizarMensajeProgreso(
"Restaurando Ejercicio: " + lcConexionNueva +
" ... ", 50);
438 llOk = Backups._DbRestore(Convert.ToString(rowEjer[
"conexion"]).Trim(), lcConexionNueva, _RutaLocal, GrupoempTools._UserPropBdGrNuevo);
442 _ErrorMessage = DB.Error_Message;
447 lcSql =
"UPDATE " + DB.SQLDatabaseReal(tcDbComunes,
"EJERCICI") +
" SET ruta = " + DB.SQLString(lcConexionNueva) +
", rutaser = " + DB.SQLString(lcConexionNueva) +
448 ", conexion = " + DB.SQLString(lcConexionNueva) +
449 " WHERE [any] = " + DB.SQLString(Convert.ToString(rowEjer[
"anyo"]).Trim());
453 lcSql =
"UPDATE " + DB.SQLDatabaseReal(tcDbComunes,
"EJERCICI") +
458 lcSql =
"UPDATE " + DB.SQLDatabaseReal(tcDbComunes,
"EJERCICI") +
460 " WHERE [any] = " + DB.SQLString(_Ejercicio);
469 if (!DB._SQLExisteBBDD(lcConexionNueva))
471 lcSql =
"DELETE FROM " + DB.SQLDatabaseReal(tcDbComunes,
"EJERCICI") +
472 " WHERE [any] = " + DB.SQLString(Convert.ToString(rowEjer[
"anyo"]).Trim());
479 if (Convert.ToString(rowEjer[
"conexion"]).Trim().Length > 2)
480 lcConexionNueva = Convert.ToString(rowEjer[
"conexion"]).Trim().Substring(0, Convert.ToString(rowEjer[
"conexion"]).Trim().Length - 2) + _Sufijo;
483 _ErrorMessage =
"Error en la conexión de ejercicio";
489 if (_EjerciciosCopiados == null || _EjerciciosCopiados.Count == 0 ||_EjerciciosCopiados.Contains(Convert.ToString(rowEjer[
"anyo"]).Trim()))
491 _ActualizarMensajeProgreso(
"Restaurando Ejercicio: " + lcConexionNueva +
" ... ", 50);
493 llOk = Backups._DbRestore(Convert.ToString(rowEjer[
"conexion"]).Trim(), lcConexionNueva, _RutaLocal, GrupoempTools._UserPropBdGrNuevo);
497 _ListaDBRestauradas.Add(lcConexionNueva);
501 _ErrorMessage = DB.Error_Message;
506 lcSql =
"UPDATE " + DB.SQLDatabaseReal(tcDbComunes,
"EJERCICI") +
" SET ruta = " + DB.SQLString(lcConexionNueva) +
", rutaser = " + DB.SQLString(lcConexionNueva) +
507 ", conexion = " + DB.SQLString(lcConexionNueva) +
508 " WHERE [any] = " + DB.SQLString(Convert.ToString(rowEjer[
"anyo"]).Trim());
525 string lcSql =
string.Empty;
526 DataTable ldtModulos =
new DataTable();
527 string lcConexionNueva =
string.Empty;
529 lcSql =
"select nombre, nom_conex from " + DB.SQLDatabaseReal(tcDbComunes,
"MODULOS");
530 DB.SQLExec(lcSql, ref ldtModulos);
532 if (ldtModulos != null && ldtModulos.Rows.Count > 0)
534 foreach (DataRow rowModulo
in ldtModulos.Rows)
536 if (Convert.ToString(rowModulo[
"nom_conex"]).Trim().Length > 2)
537 lcConexionNueva = Convert.ToString(rowModulo[
"nom_conex"]).Trim().Substring(0, Convert.ToString(rowModulo[
"nom_conex"]).Trim().Length - 2) + _Sufijo;
540 _ErrorMessage =
"Error en la conexión de ejercicio";
544 _ActualizarMensajeProgreso(
"Restaurando Módulo: " + lcConexionNueva +
" ... ", 80);
546 llOk =
Backups.
_DbRestore(Convert.ToString(rowModulo[
"nom_conex"]).Trim(), lcConexionNueva, _RutaLocal, GrupoempTools._UserPropBdGrNuevo);
548 _ListaDBRestauradas.Add(lcConexionNueva);
552 _ErrorMessage = DB.Error_Message;
557 lcSql =
"UPDATE " + DB.SQLDatabaseReal(tcDbComunes,
"MODULOS") +
" SET nom_conex = " + DB.SQLString(lcConexionNueva) +
", tablas = " + DB.SQLString(lcConexionNueva) +
558 " WHERE nombre = " + DB.SQLString(Convert.ToString(rowModulo[
"nombre"]).Trim());
576 public static bool _DbRestore(
string tcNombreBak,
string tcNombreNuevo,
string tcCarpetaBackup,
string tcPropietario)
578 string lcRutaDatosBd =
string.Empty;
582 if (!DB.DbRutaBaseDatos())
584 DB.Error_Message =
"No se ha podido averiguar la ruta física de los archivos de la base de datos. Error: " + DB.Error_Message;
588 lcRutaDatosBd =
System.IO.Path.GetDirectoryName(DB._RutaBaseDatos);
590 return DB._DbRestore(tcNombreBak, tcNombreNuevo, tcCarpetaBackup, tcPropietario, lcRutaDatosBd);
598 private void _ActualizarMensajeProgreso(
string tcMensaje,
int tnPorcentaje)
600 if (_ActualizarEstado != null)
601 _ActualizarEstado(tcMensaje, tnPorcentaje);
Backups()
Constructor por defecto
PE-104237: Clase de Backups para realizar las copias de seguridad
bool _RestoreBasesDatosGrupo()
Restaurar Bases de datos del grupo de empresas
void _BackupSageSys()
Task 155235: Método para hacer un backup de la base de datos SageSys (Eurowinsys) ...
bool RestaurarModulos(string tcDbComunes)
Task 122030: Método para restaurar los módulos de la copia de seguridad
_ActualizarEstadoProgreso _ActualizarEstado
Evento que se produce al actualizar estado
void _BackupBasesDatosGrupo()
PE-104237: Backup de las bases de datos del grupo pasado por parámetro
static bool _DbRestore(string tcNombreBak, string tcNombreNuevo, string tcCarpetaBackup, string tcPropietario)
Task 122030: Método _DbRestore donde ya obtenemos automáticamente la ruta de los ficheros de la base ...
Backups(string tcGrupo, string tcRutaLocal, string tcEjercicio, string tcGrupoBackup="", string tcSufijoDB="", bool tbLimpiarEjercicios=false, List< string > toEjerciciosMantener=null)
Constructor con parámetros