private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            if (exitoConexion == false)     //  Sí es que es FALSE, entonces el botón funciona como botón de salir
            {
                Close();
            }
            else // En caso de que este en TRUE es porque ya se probó con éxito la conexión con la DB, se vuelve a comprobar los accesos para asegurar la conexión siga disponible
            {
                string servidor    = string.Empty;
                string usuario     = string.Empty;
                string contrasenia = string.Empty;

                servidor    = txtServidor.Text.ToString().Trim();
                usuario     = txtUsuario.Text.ToString().Trim();
                contrasenia = txtContrasenia.Password.ToString().Trim();

                string cadena = $"data source={servidor}; initial catalog=master; user id={usuario}; password={contrasenia}; Connection Timeout=3";

                Connection connection = new Connection();

                if (!string.IsNullOrEmpty(servidor) && !string.IsNullOrEmpty(usuario) && !string.IsNullOrEmpty(contrasenia)) // Todos los campos completados
                {
                    if (connection.CheckConnection(cadena))                                                                  // Comprobamos la conexión con la base de datos
                    {
                        string ruta = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                        if (!Directory.Exists($"{ruta}\\FEICONT"))
                        {
                            Directory.CreateDirectory($"{ruta}\\FEICONT");
                        }

                        #region Escritura del archivo txt con los datos del servidor de base de datos
                        try
                        {
                            if (File.Exists($"{ruta}\\FEICONT\\access.txt"))
                            {
                                File.Delete($"{ruta}\\FEICONT\\access.txt");
                            }
                            else
                            {
                                using (StreamWriter streamWriter = new StreamWriter($"{ruta}\\FEICONT\\access.txt"))
                                {
                                    streamWriter.WriteLine($"{servidor}|{usuario}|{contrasenia}");
                                }
                            }
                        }
                        catch (Exception)
                        {
                            // El archivo esta en uso o no se puede acceder a el
                        }
                        #endregion Escritura del archivo txt con los datos del servidor de base de datos

                        #region Actualizar o crear InternalDB
                        InternalAccess internalAccess = new InternalAccess()
                        {
                            Servidor = servidor, Usuario = usuario, Contrasenia = contrasenia
                        };

                        ReadGeneralData readGeneralData       = new ReadGeneralData();
                        DataTable       dataTableInternalData = readGeneralData.GetInternalDataTable("[dbo].[Read_DataAccess]");

                        if (dataTableInternalData.Rows.Count == 1)  // En caso de que ya haya un registro en la db
                        {
                            internalAccess.Alter_InternalAccess("[dbo].[Update_DataAccess]");
                        }
                        else // Sí no lo hay, la crea
                        {
                            internalAccess.Alter_InternalAccess("[dbo].[Create_DataAccess]");
                        }
                        #endregion Actualizar o crear InternalDB

                        // Ejecutar todo el script de creación de base de datos (PENDIENTE)

                        asegurarGuardado = true;

                        Application.Current.Shutdown();
                        System.Windows.Forms.Application.Restart(); // Se reinicia la aplicación para que acceda de inmediato al login ya con los accesos correctos de la db
                    }
                    else
                    {
                        MessageBox.Show("Lo sentimos, se ha cambiado los datos de acceso, corriga los datos y vuelva a intentarlo.",
                                        "Sin conexión", MessageBoxButton.OK, MessageBoxImage.Information); // Aún  no se puede conectar con la base de datos
                        InternalConnection internalConnection = new InternalConnection();
                        string             uriIcon            = internalConnection.GetPathMDF() + "\\images\\close.png";
                        imageGuardar.Source      = new BitmapImage(new Uri(uriIcon));
                        TextBotonGuardar.Content = "Salir";       // Entonces la funcionalidad del botón cambia a SALIR debido a que la conexión es incorrecta
                    }
                }
                else
                {
                    MessageBox.Show("Antes de continuar debes completar todos los campos.", "Datos incompletos", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
            }
        }
Example #2
0
        public async Task ValidateSystem()
        {
            try
            {
                ReadGeneralData readGeneralData       = new ReadGeneralData();
                DataTable       dataTableInternalData = readGeneralData.GetInternalDataTable("[dbo].[Read_DataAccess]");

                int cantidadFilas = dataTableInternalData.Rows.Count;

                InternalConnection internalConnection = new InternalConnection();

                if (cantidadFilas == 1) //  Comprobar que haya registro en db interna, primera vez que se ejecute el sistema
                {                       // Se comprueba que los valores sean correctos
                    InternalAccess internalAccess = new InternalAccess();
                    internalAccess.Read_InternalAccess();
                    string cadena = $"data source={@internalAccess.Servidor}; initial catalog=master; user id={@internalAccess.Usuario}; password={@internalAccess.Contrasenia}; Connection Timeout=50";

                    Connection connection = new Connection();

                    if (!connection.CheckConnection(cadena)) // Falló la conexión con los datos de InternalDB
                    {                                        // Actualizar la cadena de conexión mediante formulario
                        MessageBox.Show("No se ha podido realizar la conexión con la base de datos, este problema suele suceder cuando se han DETENIDO los servicios de SqlServer,    " +
                                        " para solucionar esto oprima la tecla Windows y escriba 'Servicios', en el panel mostrado busque 'SQL Server (MSSQLSERVER)' haga clic derecho sobre este " +
                                        " elemento y pulse INICIAR (el valor de 'MSSQLSERVER' puede variar según la configuración que se haya realizado), si el problema persiste, asegúrese de   " +
                                        " verificar que los accesos no se hayan cambiado, para esto pruebe la conexión en el siguiente formulario. ", "Error de conexión a SqlServer",
                                        MessageBoxButton.OK, MessageBoxImage.Error);
                        ConfigurarConeccionSQL configurarConeccionSQL = new ConfigurarConeccionSQL(true);
                        configurarConeccionSQL.Show();
                    }
                    else // Aquí ya no se tiene problemas con la base de datos
                    {
                        DataTable dataTable = readGeneralData.GetDataTable("[sysfox].[Read_List_DatosFox]");

                        int cantidadLineas = dataTable.Rows.Count;

                        if (cantidadLineas <= 0)
                        {
                            MessageBox.Show("Aún no tienes registrada ninguna empresa, puedes realizar este registro desde tu sistema Contasis.",
                                            "Error de conexión con los módulos Contasis", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                            Application.Current.Shutdown();
                        }
                        else
                        {
                            DataTable dtUsuarios = readGeneralData.GetDataTable("[dbo].[List_Usuarios]");

                            if (dtUsuarios.Rows.Count == 0)
                            {
                                MessageBox.Show("Aún no tienes registrado ningún usuario, registra tu usuario en el siguiente formulario.",
                                                "Debe registrar su usuario", MessageBoxButton.OK, MessageBoxImage.Information);
                                Usuarios usuarios = new Usuarios();
                                usuarios.Show();
                            }
                            else
                            {
                                Acceso acceso = new Acceso();
                                acceso.Show();
                            }
                        }
                    }
                }
                else                                                     // En caso de que no haya registro en db interna
                {                                                        // Comprobar la conexión con el servidor de SqlServer
                    string[] valores = internalConnection.GetDataFile(); // Obtenemos los datos del archivo txt

                    if (valores.Length > 1)
                    {
                        if (!string.IsNullOrEmpty(valores[0]) && !string.IsNullOrEmpty(valores[1]) && !string.IsNullOrEmpty(valores[2]))
                        {
                            Connection connection = new Connection();
                            string     cadena     = $"data source={valores[0]}; initial catalog=master; user id={valores[1]}; password={valores[2]};";
                            if (connection.CheckConnection(cadena))                //  Verificamos que la cadena de conexión con el Servidor de SQL sea correcta
                            {
                                if (internalConnection.Create_DataAccess(valores)) // Sólo si la cadena de conexión es correcta procedemos a registrar en InternalDB
                                {
                                    Application.Current.Shutdown();
                                    System.Windows.Forms.Application.Restart();
                                }
                            }
                        }
                    }
                    else // Sí no es correcto se pide configurar de forma manual (Formulario)
                    {
                        MessageBox.Show("Se debe configurar de forma manual la conexión a la base de datos.", "Configuración requerida", MessageBoxButton.OK, MessageBoxImage.Information);
                        ConfigurarConeccionSQL configurarConeccionSQL = new ConfigurarConeccionSQL(false);
                        configurarConeccionSQL.Show();
                    }
                }
            }
            catch (Exception)
            {
            }
        }