Пример #1
0
        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            if (!conectorServidor.estaConectado())
            {
                MessageBox.Show("No se pudo establecer conexión con el servidor. Ejecute la aplicación servidor e inicie sesión nuevamente.");
                error = 1;
                this.Close();
                return;
            }

            if (string.IsNullOrWhiteSpace(txtNuevaContrasena.Text))     //Si el campo de la nueva contraseña esta vacio
            {
                MessageBox.Show("Debe ingresar la nueva contraseña");
                return;
            }

            proveedor.Accion           = 5;                                                      //Asigna la accion a realizar, 5 = cambiar contraseña
            proveedor.Contrasena       = Encriptador.crearHashMasSalto(txtNuevaContrasena.Text); //Encripta la contraseña con un hash + salt
            proveedor.Mensaje          = null;
            proveedor.AccionCompletada = false;

            conectorServidor.EnviarAServidor(proveedor);            //Envia el proveedor al servidor

            //Espera respuesta del servidor
            while (conectorServidor.ProveedorRecibido == null)      //Mientras el conector no haya recibido un proveedor
            {
                Thread.Sleep(200);                                  //Espera 200 ms
            }

            proveedor = conectorServidor.ProveedorRecibido;
            conectorServidor.ProveedorRecibido = null;
            this.Hide();                                //Oculta el formulario
        }
Пример #2
0
        private void btnIngresar_Click(object sender, EventArgs e) //Evento click en boton ingresar
        {
            if (!conectorServidor.estaConectado())                 //Si el hilo de escucha no se esta ejecutando
            {
                MessageBox.Show("El servidor no responde, verifique que se encuentre en ejecución");
                error = 1;
                return;
            }
            if (string.IsNullOrWhiteSpace(txtUsuario.Text) || string.IsNullOrWhiteSpace(txtContrasena.Text))    //Si el campo de texto o la contraseña estan vacios
            {
                return;
            }

            proveedor = new ProveedorSerializable();
            proveedor.NombreUsuario = txtUsuario.Text;
////////    proveedor.Contrasena = txtContrasena.Text;

            ///convertir a byt[]
            proveedor.BytesContr = System.Text.Encoding.UTF8.GetBytes(txtContrasena.Text);

            proveedor.Accion = 1;                           //Establece la accion a ejecutar, 1 = Iniciar sesion
            conectorServidor.EnviarAServidor(proveedor);    //Envia el objeto al servidor

            //Espera respuesta del servidor
            while (conectorServidor.ProveedorRecibido == null)  //Mientras no haya recibido un proveedor
            {
                Thread.Sleep(200);                              //Espera 200 ms
                if (!conectorServidor.estaConectado())
                {
                    MessageBox.Show("El servidor no se está ejecutando.");
                    return;
                }
            }

            proveedor = conectorServidor.ProveedorRecibido;
            conectorServidor.ProveedorRecibido = null;

            if (proveedor.Mensaje != null)          //Si hubo algún error
            {
                MessageBox.Show(proveedor.Mensaje); //Lo muestra
                txtUsuario.Text    = null;
                txtContrasena.Text = null;
                proveedor          = null;
                return;
            }
            else
            {
                MessageBox.Show(string.Format("Bienvenido {0}", proveedor.NombreUsuario));
                this.Hide();                        //Oculta el formulario
                this.Close();
                this.Dispose();
            }
        }
Пример #3
0
        private void btnRegistrarse_Click(object sender, EventArgs e)
        {
            if (!conectorServidor.estaConectado())  //Si el hilo de escucha no se esta ejecutando
            {
                MessageBox.Show("No se pudo establecer conexión con el servidor. Ejecute la aplicación servidor e inicie sesión nuevamente.");
                error = 1;
                this.Hide();
                return;
            }
            //Si quedaron campos vacios
            if (string.IsNullOrWhiteSpace(txtNombreUsuario.Text) || string.IsNullOrWhiteSpace(txtEmpresa.Text) ||
                string.IsNullOrWhiteSpace(txtCorreo.Text) || string.IsNullOrWhiteSpace(txtContrasena.Text))       //Falta la contrasena
            {
                MessageBox.Show("No deje espacios en blanco");
                return;
            }
            else
            {
                nuevoProveedor = new ProveedorSerializable();
                nuevoProveedor.NombreUsuario = txtNombreUsuario.Text;
                nuevoProveedor.Empresa       = txtEmpresa.Text;
                nuevoProveedor.Correo        = txtCorreo.Text;
                nuevoProveedor.Contrasena    = Encriptador.crearHashMasSalto(txtContrasena.Text); //Encripta la contraseña con un hash + salt
                nuevoProveedor.Accion        = 2;                                                 //Establece la accion por realizar, 2= registrar usuario
                conectorServidor.EnviarAServidor(nuevoProveedor);                                 //Envia el nuevo proveedor al servidor

                //Espera respuesta del servidor
                while (conectorServidor.ProveedorRecibido == null)       //Mientras no haya recibido un proveedor del servidor
                {
                    Thread.Sleep(200);                                   //Espera 200 ms
                }
                if (conectorServidor.ProveedorRecibido.AccionCompletada) //Si la accion se realizó correctamente
                {
                    MessageBox.Show("Registrado correctamente");
                    nuevoProveedor = null;
                    conectorServidor.ProveedorRecibido = null;
                    this.Close();
                    this.Dispose();
                }
                else
                {
                    MessageBox.Show("Fallo en el registro: " + conectorServidor.ProveedorRecibido.Mensaje);
                    nuevoProveedor = null;
                    conectorServidor.ProveedorRecibido = null;
                }
            }
        }
 public void crearCuenta(ProveedorSerializable nuevoProveedor)
 {
     conexion.Open();            //Abre la conexion con la BD
     try
     {
         adaptador = new SqlDataAdapter();       //nuevo adaptador SQL
         adaptador.InsertCommand = new SqlCommand(string.Format("INSERT INTO PROVEEDOR (nombreUsuario, empresa, correo, contrasena) " +
                                                                /*Comando registrar nueva cuenta de proveedor*/ "VALUES ('{0}', '{1}', '{2}', '{3}')", nuevoProveedor.NombreUsuario,
                                                                nuevoProveedor.Empresa, nuevoProveedor.Correo, nuevoProveedor.Contrasena), conexion);
         adaptador.InsertCommand.ExecuteNonQuery(); //Ejecuta el comando
         nuevoProveedor.AccionCompletada = true;    //La accion se completo correctamente
     }
     catch (Exception e) {                          //Hubo un error en la ejecucion del comando
         nuevoProveedor.Mensaje = e.Message;
     }
     conexion.Close();           //Cierra la conexion con la BD
 }
        public void cambiarContrasena(ProveedorSerializable camContrasProvee)
        {
            conexion.Open();        //Abre la conexion con la BD
            try
            {
                adaptador = new SqlDataAdapter();
                adaptador.UpdateCommand = new SqlCommand(string.Format("UPDATE PROVEEDOR " +
                                                                       /*Comando actualizar la contraseña del proveedor*/ "SET contrasena = '{0}' " +
                                                                       "WHERE iDProveedor = {1}", camContrasProvee.Contrasena,
                                                                       camContrasProvee.IDProveedor), conexion);
                adaptador.UpdateCommand.ExecuteNonQuery(); //Ejecuta el comando
                camContrasProvee.AccionCompletada = true;  //La accion se completo correctamente
            }
            catch (Exception e)                            //Hubo un error al ejecutar la accion
            {
                camContrasProvee.Mensaje = e.Message;
            }

            camContrasProvee.Contrasena = null;
            conexion.Close();       //Cierra la conexion con la BD
        }
Пример #6
0
 public ConectorServidor()
 {
     proveedorRecibido = null;
     productoRecibido  = null;
     objetoRecibido    = null;
     try
     {
         ipServidor = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 50000);
         //ipServidor = new IPEndPoint(IPAddress.Parse("192.168.1.3"), 50000);
         cliente = new TcpClient();
         cliente.Connect(ipServidor);
         flujo         = cliente.GetStream();
         lecturaThread = new Thread(new ThreadStart(ejecutarCliente));
         lecturaThread.Start();
         activo = true;
     }
     catch (Exception)
     {
         Error = "No se pudo establecer conexión con el servidor, ejecute la aplicación servidor.";
     }
 }
        public void actualizarProductosProve(ProveedorSerializable actualizarProductos)
        {
            conexion.Open();                                                              //Abre la conexion con la BD
            for (int i = 0; i < actualizarProductos.Productos.Count; i++)                 //Para cada producto del proveedor
            {
                if (((ProductoSerializable)actualizarProductos.Productos[i]).Accion == 3) //Si hubo modificaciones
                {
                    try
                    {
                        adaptador = new SqlDataAdapter();
                        //Obtiene los valores modificados
                        string  descripcion          = ((ProductoSerializable)actualizarProductos.Productos[i]).Descripcion;
                        string  fabricante           = ((ProductoSerializable)actualizarProductos.Productos[i]).Fabricante;
                        string  descripcionDetallada = ((ProductoSerializable)actualizarProductos.Productos[i]).DescripcionDetallada;
                        int     cantidad             = ((ProductoSerializable)actualizarProductos.Productos[i]).Cantidad;
                        int     iDProducto           = ((ProductoSerializable)actualizarProductos.Productos[i]).IDProducto;
                        decimal precio = ((ProductoSerializable)actualizarProductos.Productos[i]).Precio;

                        adaptador.UpdateCommand = new SqlCommand(string.Format("UPDATE PRODUCTO " +
                                                                               /*Comando actualizar fila de productos*/ "SET descripcion = '{0}', fabricante = '{1}', " +
                                                                               "precio = {2}, descripcionDetallada = '{3}' " +
                                                                               "WHERE iDProducto = {4}", descripcion, fabricante,
                                                                               precio, descripcionDetallada, iDProducto), conexion);
                        adaptador.UpdateCommand.ExecuteNonQuery();          //Ejecuta el comando
                        adaptador.UpdateCommand = new SqlCommand(string.Format("UPDATE PROVEEDOR_PRODUCTO " +
                                                                               /*Comando actualizar cantidad*/ "SET cantidad = {0} WHERE iDProducto = {1} " +
                                                                               "AND iDProveedor = {2}", cantidad, iDProducto, actualizarProductos.IDProveedor), conexion);
                        adaptador.UpdateCommand.ExecuteNonQuery();                                        //Ejecuta el comando

                        ((ProductoSerializable)actualizarProductos.Productos[i]).AccionCompletada = true; //La accion se completo correctamente
                    }
                    catch (Exception e)                                                                   //Si hubo algun error durante con la ejecucion del comando
                    {
                        ((ProductoSerializable)actualizarProductos.Productos[i]).Mensaje = e.Message;
                    }
                }
            }
            actualizarProductos.AccionCompletada = true; //La accion se completó
            conexion.Close();                            //Cierra la conexion con la BD
        }
        private void opcCerrarSesion_Click(object sender, EventArgs e)
        {
            tablaProveedor.Rows.RemoveAt(0);            //Borra la fila de la tabla proveedor

            while (tablaProductos.Rows.Count != 0)
            {
                tablaProductos.Rows.RemoveAt(0);        //Borra las filas de la table productos
            }
            btnActualizarProveedor.Visible = false;
            btnActualizarProductos.Visible = false;
            btnAgregarProducto.Visible     = false;
            btnCambiarContrasena.Visible   = false;
            btnEliminarProducto.Visible    = false;
            tablaProductos.Visible         = false;
            tablaProveedor.Visible         = false;
            lblArticulos.Visible           = false;
            lblProveedor.Visible           = false;
            proveedor                = null;
            conectorServidor         = null;
            opcIniciarSesion.Enabled = true;
            opcCerrarSesion.Enabled  = false;
        }
        private void btnCambiarContrasena_Click(object sender, EventArgs e)
        {
            if (!conectorServidor.estaConectado())          //Si el hilo no se esta ejecutando
            {
                MessageBox.Show("No se pudo establecer conexión con el servidor. Ejecute la aplicación servidor e inicie sesión nuevamente.");
                opcCerrarSesion_Click(null, null);
                return;
            }

            FCambioContrasena cambiarContrasena = new FCambioContrasena(proveedor, conectorServidor); //Formulario para cambio de contraseña

            cambiarContrasena.ShowDialog();                                                           //Muestra el formulario
            if (cambiarContrasena.Error == 1)
            {
                opcCerrarSesion_Click(null, null);
                return;
            }

            proveedor = cambiarContrasena.Proveedor;
            cambiarContrasena.Proveedor = null;

            if (proveedor.Mensaje == null && proveedor.Accion == 5)     //Si no hubo errores y si la accion fue asignada (no se canceló)
            {
                MessageBox.Show("Contraseña cambiada correctamente");
                cambiarContrasena.Close();
                cambiarContrasena.Dispose();
                cambiarContrasena = null;
            }
            else
            if (proveedor.Mensaje != null)                  //Si hubo errores
            {
                MessageBox.Show(proveedor.Mensaje);
                return;
            }
            proveedor.Accion = 0;
        }
Пример #10
0
        private void nuevoClienteConectado(Object objCliente)
        {
            int       numeroCliente = ((KeyValuePair <int, TcpClient>)objCliente).Key;
            TcpClient tcpCliente    = ((KeyValuePair <int, TcpClient>)objCliente).Value; //El nuevo cliente TCP

            NetworkStream         flujo = tcpCliente.GetStream();                        //Obtiene el flujo del cliente TCP
            MemoryStream          flujoMemoriaLectura;                                   //Flujo de memoria de lectura
            MemoryStream          flujoMemoriaEscritura;                                 //Flujo de memoria de escritura
            Object                objetoRecibido    = null;                              //Objeto que se recibe del cliente
            ProveedorSerializable proveedorRecibido = null;                              //Objeto ProveedorSerializable recibido del cliente
            ProductoSerializable  productoRecibido  = null;                              //Objeto ProductoSerializable recibido del cliente
            BinaryFormatter       formatterLectura;                                      //Deserializador
            BinaryFormatter       formatterEscritura;                                    //Serializador
            SolicitudesCliente    solicitudes;

            solicitudes = new SolicitudesCliente();  //Procesa el tipo de solicitud requerida por el cliente

            byte[] bufferEscritura;                  //Buffer de escritura
            byte[] bufferLectura;                    //Buffer de lectura

            //En espera de datos del cliente permanentemente
            while (activo)
            {
                try
                {
                    //LEE DATOS
                    bufferLectura = new byte[10000];                                         //Buffer que recibe los datos del cliente
                    tcpCliente.Client.Receive(bufferLectura);                                //SE BLOQUE HASTA RECIBIR DATOS DEL CLIENTE
                    formatterLectura    = new BinaryFormatter();                             //Nuevo deserializador
                    flujoMemoriaLectura = new MemoryStream(bufferLectura);                   //Obtiene el flujo de memoria del buffer de lectura
                    objetoRecibido      = formatterLectura.Deserialize(flujoMemoriaLectura); //Deserializa el objeto recibido
                    //Determina el tipo de objeto recibido
                    if (objetoRecibido.GetType() == typeof(ProveedorSerializable))
                    {
                        proveedorRecibido = (ProveedorSerializable)objetoRecibido;
                    }
                    else
                    if (objetoRecibido.GetType() == typeof(ProductoSerializable))
                    {
                        productoRecibido = (ProductoSerializable)objetoRecibido;
                    }

                    flujoMemoriaLectura.Flush();
                    flujo.Flush();

                    if (proveedorRecibido != null)              //Si se recibio un objeto tipo ProveedorSerializable
                    {
                        switch (proveedorRecibido.Accion)       //Accion requerida por el cliente
                        {
                        case 1:
                            solicitudes.iniciarSesion(proveedorRecibido);
                            break;

                        case 2:
                            solicitudes.crearCuenta(proveedorRecibido);
                            break;

                        case 3:
                            solicitudes.actualizarProveedor(proveedorRecibido);
                            break;

                        case 4:
                            solicitudes.actualizarProductosProve(proveedorRecibido);
                            break;

                        case 5:
                            solicitudes.cambiarContrasena(proveedorRecibido);
                            break;
                        }
                    }
                    else
                    if (productoRecibido != null)                           //Si se recibio un objeto tipo ProductoSerializable
                    {
                        switch (productoRecibido.Accion)                    //Accion requerida por el cliente
                        {
                        case 1:
                            solicitudes.agregarProducto(productoRecibido);
                            break;

                        case 2:
                            solicitudes.eliminarProductoProve(productoRecibido);
                            break;

                        case 3:
                            solicitudes.listarProductos(productoRecibido);
                            break;
                        }
                    }

                    flujoMemoriaEscritura = new MemoryStream();                                 //Nuevo flujo de memoria de escritura
                    formatterEscritura    = new BinaryFormatter();                              //Nuevo serializador

                    if (proveedorRecibido != null)                                              //Si se recibio un objeto tipo ProductoSerializable
                    {
                        formatterEscritura.Serialize(flujoMemoriaEscritura, proveedorRecibido); //Serializa el objeto al flujo de memoria de escritura
                        proveedorRecibido = null;
                    }
                    else
                    if (productoRecibido != null)                                              //Si se recibio un objeto tipo ProductoSerializable
                    {
                        formatterEscritura.Serialize(flujoMemoriaEscritura, productoRecibido); //Serializa el objeto al flujo de memoria de escritura
                        productoRecibido = null;
                    }
                    bufferEscritura = flujoMemoriaEscritura.ToArray();      //Copia el flujo a un array de bytes (al buffer de escritura)
                    tcpCliente.Client.Send(bufferEscritura);                //Envia respuesta al cliente
                    flujoMemoriaEscritura.Flush();
                    flujo.Flush();
                }
                catch (Exception)                 //Si hubo algún error durante el envio o recibimiento de datos con el cliente
                {
                    MessageBox.Show("Se ha desconectado del host # " + (numeroCliente + 1));
                    break;
                }
                bufferLectura         = null;
                formatterLectura      = null;
                flujoMemoriaLectura   = null;
                objetoRecibido        = null;
                flujoMemoriaEscritura = null;
                formatterEscritura    = null;
                bufferEscritura       = null;
            }

            tcpCliente.Close();                     //Cierra la conexion con el cliente TCP
            tcpCliente  = null;
            flujo       = null;
            solicitudes = null;
        }
        private void tablaProductos_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (proveedorActualizado == null)
            {
                proveedorActualizado = proveedor.copiar(proveedor); //Copia los valores del proveedor original a un nuevo objeto proveedor
            }
            switch (e.ColumnIndex)                                  //Determina la columna que se editó
            {
            case 1:
                if (tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null)     //Si la celda quedó vacía
                {
                    ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Descripcion = null;
                    proveedorActualizado.Mensaje = "Celdas vacías";
                }
                else
                {
                    proveedorActualizado.Mensaje = null;
                    ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Descripcion = (string)tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                }
                break;

            case 2:
                if (tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null)     //Si la celda quedó vacía
                {
                    ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Fabricante = null;
                    proveedorActualizado.Mensaje = "Celdas vacías";
                }
                else
                {
                    proveedorActualizado.Mensaje = null;
                    ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Fabricante = (string)tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                }
                break;

            case 3:
                if (tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null)     //Si la celda quedó vacía
                {
                    ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Cantidad = 0;
                    proveedorActualizado.Mensaje = "Celdas vacías";
                }
                else
                {
                    proveedorActualizado.Mensaje = null;
                    try
                    {
                        ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Cantidad = Int32.Parse(tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
                    }
                    catch (Exception) { }
                }
                break;

            case 4:
                if (tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null)     //Si la celda quedó vacía
                {
                    ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Precio = 0;
                    proveedorActualizado.Mensaje = "Celdas vacías";
                }
                else
                {
                    try
                    {
                        ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Precio = decimal.Parse(tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
                        proveedorActualizado.Mensaje = null;
                    }
                    catch (Exception)
                    {
                        tablaProductos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = null;
                        proveedorActualizado.Mensaje = "Celdas vacías";
                    }
                }
                break;

            case 5:
                ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).DescripcionDetallada = (string)((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                break;
            }
            ((ProductoSerializable)proveedorActualizado.Productos[e.RowIndex]).Accion = 3; //Accion = 3: si hubo cambios, Accion != 3 no hubo cambios
        }
Пример #12
0
 public FCambioContrasena(ProveedorSerializable proveedor, ConectorServidor conectorServidor)
 {
     InitializeComponent();
     this.conectorServidor = conectorServidor;
     this.proveedor        = proveedor;
 }
        private void btnActualizarProveedor_Click(object sender, EventArgs e)
        {
            if (!conectorServidor.estaConectado())
            {
                MessageBox.Show("No se pudo establecer conexión con el servidor. Ejecute la aplicación servidor e inicie sesión nuevamente.");
                opcCerrarSesion_Click(null, null);
                return;
            }
            string oldNombreUsuario = proveedor.NombreUsuario;                               //Copia
            string oldEmpresa       = proveedor.Empresa;                                     //los valores
            string oldCorreo        = proveedor.Correo;                                      //antiguos del proveedor

            if (tablaProveedor.Rows[0].Cells[0].Value.ToString().Equals(oldNombreUsuario) && //Si los datos antiguos
                tablaProveedor.Rows[0].Cells[1].Value.ToString().Equals(oldEmpresa) &&       //son iguales
                tablaProveedor.Rows[0].Cells[2].Value.ToString().Equals(oldCorreo))          //a los datos actualizados
            {
                MessageBox.Show("No se modificó ningún dato.");                              //No hace falta actualizar los datos
                return;
            }

            //Las columnas que no se modificaron se marcan como null
            if (tablaProveedor.Rows[0].Cells[0].Value.ToString().Equals(oldNombreUsuario))
            {
                proveedor.NombreUsuario = null;
            }
            else
            {
                proveedor.NombreUsuario = tablaProveedor.Rows[0].Cells[0].Value.ToString();
            }
            if (tablaProveedor.Rows[0].Cells[1].Value.ToString().Equals(oldEmpresa))
            {
                proveedor.Empresa = null;
            }
            else
            {
                proveedor.Empresa = tablaProveedor.Rows[0].Cells[1].Value.ToString();
            }
            if (tablaProveedor.Rows[0].Cells[2].Value.ToString().Equals(oldCorreo))
            {
                proveedor.Correo = null;
            }
            else
            {
                proveedor.Correo = tablaProveedor.Rows[0].Cells[2].Value.ToString();
            }

            proveedor.AccionCompletada = false;
            proveedor.Accion           = 3;     //Establece la accion requerida, 3 = actualizar proveedor
            proveedor.Mensaje          = null;

            conectorServidor.EnviarAServidor(proveedor);        //Envia el objeto al servidor

            while (conectorServidor.ProveedorRecibido == null)  //Mientras no haya recibido un proveedor
            {
                Thread.Sleep(200);                              //Espera 200 ms
            }
            proveedor = conectorServidor.ProveedorRecibido;
            conectorServidor.ProveedorRecibido = null;

            if (proveedor.Mensaje != null)  //Si hubo algún error
            {                               //Revierte los cambios
                tablaProveedor.Rows[0].Cells[0].Value = proveedor.NombreUsuario = oldNombreUsuario;
                tablaProveedor.Rows[0].Cells[1].Value = proveedor.Empresa = oldEmpresa;
                tablaProveedor.Rows[0].Cells[2].Value = proveedor.Correo = oldCorreo;
                MessageBox.Show(proveedor.Mensaje);     //Muestra el error
            }
            else
            {   //Copia los datos al objeto proveedor
                proveedor.NombreUsuario = tablaProveedor.Rows[0].Cells[0].Value.ToString();
                proveedor.Empresa       = tablaProveedor.Rows[0].Cells[1].Value.ToString();
                proveedor.Correo        = tablaProveedor.Rows[0].Cells[2].Value.ToString();
                MessageBox.Show("La información se actualizó correctamente.");
            }
        }
        private void opcIniciarSesion_Click(object sender, EventArgs e)
        {
            if (conectorServidor != null)  //Si no se ha conectado al servidor
            {
                if (!conectorServidor.estaConectado())
                {
                    //conectorServidor.LecturaThread.Abort();
                    conectorServidor = null;
                    conectorServidor = new ConectorServidor();

                    if (conectorServidor.Error != null)
                    {
                        MessageBox.Show(conectorServidor.Error);
                        conectorServidor = null;
                        return;
                    }
                }
            }
            else
            {
                conectorServidor = new ConectorServidor();

                if (conectorServidor.Error != null)
                {
                    MessageBox.Show(conectorServidor.Error);
                    conectorServidor = null;
                    return;
                }
            }

            FIniciarSesion inicioSesion = new FIniciarSesion(conectorServidor);

            inicioSesion.ShowDialog();

            if (inicioSesion.Error == 1)
            {
                inicioSesion.Close();
                inicioSesion.Dispose();
                inicioSesion = null;
                opcCerrarSesion_Click(null, null);
                return;
            }

            proveedor = inicioSesion.Proveedor;

            if (proveedor == null)
            {
                return;
            }

            if (proveedor.Mensaje == null) //Si no hubo errores
            {
                //Agrega la informacion del proveedor a la tabla proveedor
                tablaProveedor.Rows.Add(new Object[] { proveedor.NombreUsuario, proveedor.Empresa, proveedor.Correo, proveedor.Habilitado });

                for (int i = 0; i < proveedor.Productos.Count; i++) //Agrega los productos del proveedor
                {
                    tablaProductos.Rows.Add(new Object[] { ((ProductoSerializable)proveedor.Productos[i]).IDProducto, ((ProductoSerializable)proveedor.Productos[i]).Descripcion, ((ProductoSerializable)proveedor.Productos[i]).Fabricante, ((ProductoSerializable)proveedor.Productos[i]).Cantidad, ((ProductoSerializable)proveedor.Productos[i]).Precio, ((ProductoSerializable)proveedor.Productos[i]).DescripcionDetallada });
                }

                opcIniciarSesion.Enabled              = false;
                opcCerrarSesion.Enabled               = true;
                lblArticulos.Visible                  = true;
                lblProveedor.Visible                  = true;
                tablaProveedor.Visible                = true;
                tablaProductos.Visible                = true;
                btnActualizarProveedor.Visible        = true;
                btnCambiarContrasena.Visible          = true;
                btnAgregarProducto.Visible            = true;
                btnEliminarProducto.Visible           = true;
                btnActualizarProductos.Visible        = true;
                tablaProductos.CellValueChanged      += new DataGridViewCellEventHandler(tablaProductos_CellValueChanged);                       //Maneja el evento de cambio de valor de una celda de la tabla de productos
                tablaProductos.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(tablaProductos_EditingControlShowing); //Maneja el evento de muestra de cuadro de edicion de una celda
            }
            proveedor.Accion = 0;
            inicioSesion.Close();
            inicioSesion.Dispose();
            inicioSesion = null;
        }
        public void iniciarSesion(ProveedorSerializable proveedorRecibido)
        {
            Object[] fila;              //Fila leida de la BD
            try
            {
                conexion.Open();            //Abre la conexion con la BD
                adaptador = new SqlDataAdapter(string.Format("SELECT iDProveedor, nombreUsuario, empresa, correo, habilitado, contrasena " +
                                                             /*Comando seleccionar proveedor*/ "FROM PROVEEDOR WHERE nombreUsuario = '{0}' OR correo = '{0}'",
                                                             proveedorRecibido.NombreUsuario), conexion);
                dataSet = new DataSet();                                                          //Nuevo DataSet
                adaptador.Fill(dataSet, "PROVEEDOR");                                             //Llena el dataSet con el registro obtenido
                if (dataSet.Tables[0].Rows.Count != 1)                                            //Si no se obtuvo un registro
                {
                    throw new Exception("El usuario no existe");                                  //El usuario o correo ingredado no se encuentra registrado
                }
                fila = dataSet.Tables[0].Rows[0].ItemArray;                                       //Obtiene la fila con los datos del proveedor
//////////////  if (Encriptador.validarContrasena(proveedorRecibido.Contrasena, (string)fila[5]))   //Si la contraseña ngresada es válida
                if (Encriptador.validarContrasena(proveedorRecibido.BytesContr, (string)fila[5])) //Si la contraseña ngresada es válida
                {
                    if (proveedorRecibido.Habilitado = (bool)fila[4])                             //Si la cuenta está habilitada
                    {
                        proveedorRecibido.IDProveedor   = (int)fila[0];                           //Copia los
                        proveedorRecibido.NombreUsuario = (string)fila[1];                        //datos de
                        proveedorRecibido.Empresa       = (string)fila[2];                        //la BD
                        proveedorRecibido.Correo        = (string)fila[3];                        //al objeto proveedorRecibido
                        adaptador = new SqlDataAdapter(String.Format("SELECT PD.iDProducto, PD.descripcion, PD.fabricante, PV_PD.cantidad, PD.precio, PD.descripcionDetallada, PV.iDProveedor " +
                                                                     /*Obtiene los productos del proveedor*/ "FROM PROVEEDOR AS PV, PRODUCTO AS PD, PROVEEDOR_PRODUCTO AS PV_PD " +
                                                                     "WHERE PD.iDProducto = PV_PD.iDProducto AND PV_PD.iDProveedor = PV.iDProveedor AND PV.iDProveedor = {0}", proveedorRecibido.IDProveedor), conexion);
                        dataSet = new DataSet();                                                          //Nuevo DataSet
                        adaptador.Fill(dataSet, "PRODUCTO");                                              //Llena el DataSet con las filas de productos
                        if (dataSet.Tables[0].Rows.Count != 0)                                            //Si no se obtuvieron 0 filas
                        {
                            for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)                        //Para cada fila de productos
                            {
                                fila = dataSet.Tables[0].Rows[i].ItemArray;                               //Obtiene la fila con los datos del producto
                                proveedorRecibido.Productos.Add(new ProductoSerializable((int)fila[0],
                                                                                         (string)fila[1], //Agrega un nuevo objeto
                                                                                         (string)fila[2],
                                                                                         (int)fila[3],    //ProductoSerializable al
                                                                                         (decimal)fila[4],
                                                                                         (string)fila[5], //proveedor
                                                                                         (int)fila[6]));
                            }
                        }
                        proveedorRecibido.AccionCompletada = true; //La accion se completo correctamente
                    }
                    else                                           //Si la cuenta no esta habilitada
                    {
                        proveedorRecibido.Mensaje = "Su cuenta no ha sido habilitada por el administrador";
                    }
                }
                else                //Si la contraseña es incorrecta
                {
                    proveedorRecibido.Mensaje = "Contraseña incorrecta";
                }
////////        proveedorRecibido.Contrasena = null;        //Borra la contraseña del objeto
                proveedorRecibido.BytesContr = null;
            }
            catch (Exception e)
            {
                proveedorRecibido.Mensaje = e.Message;
            }
            conexion.Close();           //Cierra la conexion con la BD
        }
        private void btnActualizarProductos_Click(object sender, EventArgs e)
        {
            if (!conectorServidor.estaConectado())  //Si el hilo no se esta ejecutando
            {
                MessageBox.Show("No se pudo establecer conexión con el servidor. Ejecute la aplicación servidor e inicie sesión nuevamente.");
                opcCerrarSesion_Click(null, null);
                return;
            }
            string errores = null;              //Almacena los errores que se producen

            if (proveedorActualizado == null)   //Si no se hizo alguna actualizacion a las celdas de la tabla proveedor
            {
                MessageBox.Show("No se han modificado los datos.");
                return;
            }

            //Comprobar que no hayan quedado celdas en blanco
            if (proveedorActualizado.Mensaje != null)
            {
                MessageBox.Show("No debe dejar celdas en blanco");
                return;
            }

            proveedorActualizado.Accion = 4;                        //Estable la accion requerida, 4 = actualizar productos del proveedor

            conectorServidor.EnviarAServidor(proveedorActualizado); //Envia el proveedor al servidor

            while (conectorServidor.ProveedorRecibido == null)      //Mientras no haya recibido un proveedor del servidor
            {
                Thread.Sleep(200);
            }

            proveedorActualizado = conectorServidor.ProveedorRecibido;
            conectorServidor.ProveedorRecibido = null;
            for (int i = 0; i < proveedorActualizado.Productos.Count; i++)
            {
                if (((ProductoSerializable)proveedor.Productos[i]).Accion == 3)                    //Si la fila se modificó
                {
                    if (((ProductoSerializable)proveedorActualizado.Productos[i]).Mensaje != null) //Si no hubo mensajes de error
                    {
                        tablaProductos.Rows[i].Cells[1].Value = ((ProductoSerializable)proveedor.Productos[i]).Descripcion;
                        tablaProductos.Rows[i].Cells[2].Value = ((ProductoSerializable)proveedor.Productos[i]).Fabricante;
                        tablaProductos.Rows[i].Cells[3].Value = ((ProductoSerializable)proveedor.Productos[i]).Cantidad;
                        tablaProductos.Rows[i].Cells[4].Value = ((ProductoSerializable)proveedor.Productos[i]).Precio;
                        tablaProductos.Rows[i].Cells[5].Value = ((ProductoSerializable)proveedor.Productos[i]).DescripcionDetallada;
                        errores += "Error al actualizar los datos de la fila " + i + ". Compruebe que no se repita algún producto.\n";
                    }
                    else
                    {
                        ((ProductoSerializable)proveedor.Productos[i]).Descripcion          = ((ProductoSerializable)proveedorActualizado.Productos[i]).Descripcion;
                        ((ProductoSerializable)proveedor.Productos[i]).Fabricante           = ((ProductoSerializable)proveedorActualizado.Productos[i]).Fabricante;
                        ((ProductoSerializable)proveedor.Productos[i]).Cantidad             = ((ProductoSerializable)proveedorActualizado.Productos[i]).Cantidad;
                        ((ProductoSerializable)proveedor.Productos[i]).Precio               = ((ProductoSerializable)proveedorActualizado.Productos[i]).Precio;
                        ((ProductoSerializable)proveedor.Productos[i]).DescripcionDetallada = ((ProductoSerializable)proveedorActualizado.Productos[i]).DescripcionDetallada;
                    }
                }
            }

            if (errores != null)
            {
                MessageBox.Show(errores);
            }
            else
            {
                MessageBox.Show("Los datos se actualizaron correctamente");
            }
            proveedorActualizado = null;
        }
        public void actualizarProveedor(ProveedorSerializable actProveedor)
        {
            conexion.Open();                        //Abre la conexion con la BD
            string cadenaConsulta        = "UPDATE PROVEEDOR SET  WHERE iDProveedor = " + actProveedor.IDProveedor;
            string columnas              = "";      //columnas que se modificaron
            int    columnasPorActualizar = 0;       //Cantidad de columnas que se modificaron
            int    comas = 0;                       //Total de comas

            if (actProveedor.NombreUsuario != null) //Si la columna NombreUsuario se modifico
            {
                columnasPorActualizar++;            //Incrementa el total de columnas por actualizar
            }
            if (actProveedor.Empresa != null)       //Si la columna Empresa se modifico
            {
                columnasPorActualizar++;            //Incrementa el total de columnas por actualizar
            }
            if (actProveedor.Correo != null)        //Si la columna Correo se modifico
            {
                columnasPorActualizar++;            //Incrementa el total de columnas por actualizar
            }
            if (actProveedor.NombreUsuario != null)
            {
                if (comas == columnasPorActualizar - 1)                                                         //Si el total de comas colocadas es el total de columnas - 1
                {
                    columnas = string.Concat(columnas, "nombreUsuario = '" + actProveedor.NombreUsuario + "'"); //Concatena sin coma al final
                }
                else
                {
                    columnas = string.Concat(columnas, "nombreUsuario = '" + actProveedor.NombreUsuario + "', "); //Concatena con coma al final
                    comas++;                                                                                      //Incrementa el total de comas colocadas
                }
            }

            if (actProveedor.Empresa != null)
            {
                if (comas == columnasPorActualizar - 1)                                             //Si el total de comas colocadas es el total de columnas - 1
                {
                    columnas = string.Concat(columnas, "empresa = '" + actProveedor.Empresa + "'"); //Concatena sin coma al final
                }
                else
                {
                    columnas = string.Concat(columnas, "empresa = '" + actProveedor.Empresa + "', ");           //Concatena con coma al final
                    comas++;
                }
            }

            if (actProveedor.Correo != null)
            {
                if (comas == columnasPorActualizar - 1)                                           //Si el total de comas colocadas es el total de columnas - 1
                {
                    columnas = string.Concat(columnas, "correo = '" + actProveedor.Correo + "'"); //Concatena sin coma al final
                }
                else
                {
                    columnas = string.Concat(columnas, "correo = '" + actProveedor.Correo + "', ");             //Concatena con coma al final
                    comas++;
                }
            }

            cadenaConsulta = cadenaConsulta.Insert(cadenaConsulta.IndexOf("SET") + 4, columnas);    //Inserta las columnas y sus nuevos valores a la cadena de la consulta

            try
            {
                adaptador = new SqlDataAdapter();                                   //Nuevo adaptador SQL
                adaptador.UpdateCommand = new SqlCommand(cadenaConsulta, conexion); //Asigna el comando de actualizacion
                adaptador.UpdateCommand.ExecuteNonQuery();                          //Ejecuta el comando
                actProveedor.AccionCompletada = true;                               //La accion se completo correctamente
            }
            catch (Exception e) {                                                   //Hubo un error al ejecutar la consulta
                actProveedor.Mensaje = e.Message;
            }
            conexion.Close();       //Cierra la conexion con la BD
        }