/// <summary> /// Ejecuta el script /// </summary> internal async Task ExecuteScriptAsync(ConnectionModel connection, Application.Connections.Models.ArgumentListModel arguments, System.Threading.CancellationToken cancellationToken) { if (string.IsNullOrWhiteSpace(Content)) { SolutionViewModel.MainViewModel.MainController.HostController.SystemController.ShowMessage("Introduzca una consulta para ejecutar"); } else if (connection == null) { SolutionViewModel.MainViewModel.MainController.HostController.SystemController.ShowMessage("Seleccione una conexión"); } else { using (LibLogger.Models.Log.BlockLogModel block = SolutionViewModel.MainViewModel.Manager.Logger.Default.CreateBlock(LibLogger.Models.Log.LogModel.LogType.Info, $"Comienza la ejecución de la consulta")) { string selectedText = GetEditorSelectedText(); // Ejecuta la consulta if (!string.IsNullOrEmpty(selectedText)) { await SolutionViewModel.MainViewModel.Manager.ExecuteQueryAsync(connection, selectedText, arguments, connection.TimeoutExecuteScript, cancellationToken); } else { await SolutionViewModel.MainViewModel.Manager.ExecuteQueryAsync(connection, Content, arguments, connection.TimeoutExecuteScript, cancellationToken); } // Muestra el tiempo de ejecución block.Info($"Tiempo de ejecución: {SolutionViewModel.ConnectionExecutionViewModel.ExecutionTime}"); } } }
/// <summary> /// Obtiene los parámetros de un archivo /// </summary> internal (Application.Connections.Models.ArgumentListModel arguments, string error) GetParameters() { Application.Connections.Models.ArgumentListModel arguments = new Application.Connections.Models.ArgumentListModel(); string error = string.Empty; // Carga los parámetros si es necesario if (!string.IsNullOrWhiteSpace(FileNameParameters)) { if (!System.IO.File.Exists(FileNameParameters)) { error = "No se encuentra el archivo de parámetros"; } else { try { System.Data.DataTable table = new LibJsonConversor.JsonToDataTableConversor().ConvertToDataTable(LibHelper.Files.HelperFiles.LoadTextFile(FileNameParameters)); // Crea la colección de parámetros a partir de la tabla if (table.Rows.Count == 0) { error = "No se ha encontrado ningún parámetro en el archivo"; } else { foreach (System.Data.DataColumn column in table.Columns) { if (column.ColumnName.StartsWith("Constant.", StringComparison.CurrentCultureIgnoreCase)) { arguments.Constants.Add(column.ColumnName.Substring("Constant.".Length), table.Rows[0][column.Ordinal]); } else { arguments.Parameters.Add(column.ColumnName, table.Rows[0][column.Ordinal]); } } } } catch (Exception exception) { error = $"Error cuando se cargaba el archivo de parámetros. {exception.Message}"; } } } // Devuelve el resultado return(arguments, error); }
/// <summary> /// Ejecuta un archivo /// </summary> private async Task <bool> ExecuteFileAsync(BlockLogModel block, ExecuteFilesItemViewModel file, ConnectionModel connection, Application.Connections.Models.ArgumentListModel arguments, System.Threading.CancellationToken cancellationToken) { bool executed = false; System.Timers.Timer timer = new System.Timers.Timer(TimeSpan.FromMilliseconds(500).TotalMilliseconds); // Asigna el manejador de eventos al temporizador timer.Elapsed += (sender, args) => file.SetStatus(ExecuteFilesItemViewModel.Status.Start, "Ejecutando ..."); timer.Start(); // Ejecuta el archivo try { string content = LibHelper.Files.HelperFiles.LoadTextFile(System.IO.Path.Combine(file.Path, file.FileName)); // Ejecuta el contenido del archivo if (string.IsNullOrWhiteSpace(content)) { file.SetStatus(ExecuteFilesItemViewModel.Status.Error, "El archivo está vacío"); } else { // Arranca la ejecución file.SetStatus(ExecuteFilesItemViewModel.Status.Start, "Ejecutando ..."); // Ejecuta la consulta await SolutionViewModel.MainViewModel.Manager.ExecuteQueryAsync(connection, content, arguments, connection.TimeoutExecuteScript, cancellationToken); // Detiene la ejecución file.SetStatus(ExecuteFilesItemViewModel.Status.End, "Fin de ejecución"); } // Indica que se ha ejecutado correctamente executed = true; } catch (Exception exception) { block.Error($"Error al ejecutar el archivo '{file.FileName}'"); block.Error(exception.Message); file.SetStatus(ExecuteFilesItemViewModel.Status.Error, $"Error al ejecutar el archivo. {exception.Message}"); } // Detiene el reloj timer.Stop(); timer.Dispose(); // Devuelve el valor que indica si se ha ejecutado correctamente return(!executed); }
/// <summary> /// Ejecuta el script /// </summary> internal async Task ExecuteScriptAsync(ConnectionModel connection, Application.Connections.Models.ArgumentListModel arguments, System.Threading.CancellationToken cancellationToken) { // Marca el estado de los scripts InitFileStatus(); // Ejecuta los archivos if (CountEnqueuedFiles() == 0) { SolutionViewModel.MainViewModel.MainController.HostController.SystemController.ShowMessage("Seleccione al menos un archivo"); } else if (connection == null) { SolutionViewModel.MainViewModel.MainController.HostController.SystemController.ShowMessage("Seleccione una conexión"); } else { using (BlockLogModel block = SolutionViewModel.MainViewModel.Manager.Logger.Default.CreateBlock(LogModel.LogType.Info, "Comienza la ejecución de los archivos")) { System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); bool hasError = false; // Arranca el temporizador stopwatch.Start(); // Ejecuta los archivos foreach (ExecuteFilesItemViewModel file in Files) { if (file.State == ExecuteFilesItemViewModel.Status.Enqueued) { if (hasError) { file.SetStatus(ExecuteFilesItemViewModel.Status.Canceled, "Cancelado por un error anterior"); } else { hasError = await ExecuteFileAsync(block, file, connection, arguments, cancellationToken); } } } // Muestra el tiempo de ejecución stopwatch.Stop(); block.Info($"Tiempo de ejecución: {stopwatch.Elapsed.ToString()}"); SolutionViewModel.MainViewModel.Manager.Logger.Flush(); } } }