コード例 #1
0
        public void agregarProducto(ProductoSerializable nuevoProducto)
        {
            conexion.Open();            //Abre la conexion con la BD
            try
            {
                adaptador = new SqlDataAdapter();
                adaptador.InsertCommand = new SqlCommand(string.Format("EXECUTE Insertar_Producto '{0}', '{1}', {2}, {3}, '{4}', {5}", nuevoProducto.Descripcion, nuevoProducto.Fabricante,
                                                                       /*Comando insertar nuevo producto*/ nuevoProducto.Cantidad, nuevoProducto.Precio, nuevoProducto.DescripcionDetallada, nuevoProducto.IDProveedor), conexion);

                adaptador.InsertCommand.ExecuteNonQuery();      //Ejecuta el comando

                reader = new SqlCommand(string.Format("SELECT PD.iDProducto " +
                                                      "FROM PRODUCTO as PD " +
                                                      /*Comando obtener el produto*/ "WHERE PD.descripcion = '{0}' AND PD.fabricante = '{1}' AND " +
                                                      /*recien ingresado a la BD*/ "PD.descripcionDetallada = '{2}'", nuevoProducto.Descripcion,
                                                      nuevoProducto.Fabricante, nuevoProducto.DescripcionDetallada), conexion).ExecuteReader();
                while (reader.Read())
                {
                    nuevoProducto.IDProducto = (int)reader["iDProducto"]; //Lee el iD que se asignó al producto
                }
                reader.Close();                                           //Cierra el lector
                nuevoProducto.AccionCompletada = true;                    //Accion completada correctamente
            }
            catch (Exception e)                                           //Hubo un error al insertar el producto
            {
                nuevoProducto.Mensaje    = e.Message;
                nuevoProducto.IDProducto = 0;
            }
            conexion.Close();               //Cierra la conexion con la BD
        }
コード例 #2
0
        public void listarProductos(ProductoSerializable listarProductos)
        {
            Object[] fila;              //Fila leida de la BD
            try
            {
                conexion.Open();            //Abre la conexion con la BD
                adaptador = new SqlDataAdapter("SELECT pr.iDProducto, pr.descripcion, pr.fabricante, pr.precio, pr.descripcionDetallada " +
                                               "FROM PRODUCTO as pr", conexion);
                dataSet = new DataSet();                                                               //Nuevo DataSet
                adaptador.Fill(dataSet, "PRODUCTO");                                                   //Llena el dataSet con el registro obtenido
                if (dataSet.Tables[0].Rows.Count == 0)                                                 //Si no se obtuvieron registros
                {
                    throw new Exception("No hay productos");                                           //No hay productos registrados
                }
                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
                    listarProductos.ProductosRegistrados.Add(new ProductoSerializable((int)fila[0],
                                                                                      (string)fila[1], //Agrega un nuevo objeto
                                                                                      (string)fila[2],
                                                                                      0,               //ProductoSerializable a
                                                                                      (decimal)fila[3],
                                                                                      (string)fila[4], //la lista de productos
                                                                                      0));
                }

                listarProductos.AccionCompletada = true;      //La accion se completo correctamente
            }
            catch (Exception e)
            {
                listarProductos.Mensaje = e.Message;
            }
            conexion.Close();           //Cierra la conexion con la BD
        }
コード例 #3
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(txtDescripcion.Text) || string.IsNullOrWhiteSpace(txtFabricante.Text) ||
                string.IsNullOrWhiteSpace(txtPrecio.Text) || string.IsNullOrWhiteSpace(txtDescripcionDetallada.Text) || numericUpDownCantidad.Value == 0)
            {
                MessageBox.Show("No deje campos vacios o en cantidad 0.");
                return;
            }

            nuevoProducto        = new ProductoSerializable(0, txtDescripcion.Text, txtFabricante.Text, (int)numericUpDownCantidad.Value, decimal.Parse(txtPrecio.Text), txtDescripcionDetallada.Text, iDProveedor);
            nuevoProducto.Accion = 1;
            conectorServidor.EnviarAServidor(nuevoProducto);

            //ESPERAR RESPUESTA
            contador = 0;
            while (conectorServidor.ProductoRecibido == null)
            {
                Thread.Sleep(200);
                if (++contador == 10)
                {
                    break;
                }
            }

            if (contador == 10)
            {
                nuevoProducto.Mensaje = "El servidor no se encuentra en ejecución.";
            }
            else
            {
                nuevoProducto = conectorServidor.ProductoRecibido;
            }

            if (nuevoProducto.Mensaje != null) //si hubo un error
            {
                MessageBox.Show("Error al ingresar el producto: " + nuevoProducto.Mensaje);
                //txtUsuario.Text = null;
                conectorServidor.ProductoRecibido = null;
                nuevoProducto = null;
                return;
            }
            else                              //Si se agregó correctamente
            {
                MessageBox.Show("Producto agregado correctamente");
                conectorServidor.ProductoRecibido = null;
                this.Hide();
                this.Close();
                this.Dispose();
            }
        }
コード例 #4
0
        private void btnEliminarProducto_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.");
                opcCerrarSesion_Click(null, null);
                return;
            }
            DialogResult dr = MessageBox.Show(string.Format("¿Desea eliminar el producto {0} ?",             //Confirmacion para borrar el producto
                                                            tablaProductos.CurrentRow.Cells[1].Value), "Eliminar producto", MessageBoxButtons.YesNo);

            if (dr == DialogResult.Yes)                //Si selecciono que si
            {
                if (!conectorServidor.estaConectado()) //Si el hilo no se esta ejecutando
                {
                    MessageBox.Show("El servidor no responde, verifique que se encuentre en ejecución");
                    return;
                }

                if (tablaProductos.Rows.Count == 0)             //Si no hay productos en la tabla
                {
                    MessageBox.Show("No hay más productos.");
                    return;
                }

                producto                  = (ProductoSerializable)proveedor.Productos[tablaProductos.CurrentRow.Index]; //Obtiene la fila enfocada de la tabla de productos
                producto.Accion           = 2;                                                                          //Establece la accion, 2 = eliminar producto
                producto.AccionCompletada = false;
                producto.Mensaje          = null;

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

                while (conectorServidor.ProductoRecibido == null)   //Mientras no haya recibido un producto
                {
                    Thread.Sleep(200);
                }

                producto = conectorServidor.ProductoRecibido;
                conectorServidor.ProductoRecibido = null;

                if (producto.Mensaje != null)
                {
                    MessageBox.Show("Error al eliminar el producto: " + producto.Mensaje);
                    return;
                }

                proveedor.Productos.RemoveAt(tablaProductos.CurrentRow.Index);    //Borra el producto del proveedor
                tablaProductos.Rows.RemoveAt(tablaProductos.CurrentRow.Index);    //Borra la fila enfocada de la tabla de productos
                MessageBox.Show("Se eliminó el producto correctamente.");
                producto = null;
            }
        }
コード例 #5
0
        private void btnAgregarProducto_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.");
                opcCerrarSesion_Click(null, null);
                return;
            }
            FNuevoProducto agregarNuevoProducto = new FNuevoProducto(conectorServidor, proveedor.IDProveedor); //Crea un formulario para un nuevo producto

            agregarNuevoProducto.ShowDialog();                                                                 //Muestra el formulario
            producto = agregarNuevoProducto.NuevoProducto;
            agregarNuevoProducto.NuevoProducto = null;

            if (agregarNuevoProducto.Error == 1)
            {
                opcCerrarSesion_Click(null, null);
                return;
            }

            if (producto == null)               //Si hubo un error
            {
                return;
            }

            agregarNuevoProducto.NuevoProducto = null;
            //Agrega el producto a la tabla
            for (int i = 0; i < tablaProductos.Rows.Count; i++)
            {
                if (int.Parse(tablaProductos.Rows[i].Cells[0].Value.ToString()) == producto.IDProducto)
                {
                    tablaProductos.Rows[i].Cells[3].Value = int.Parse(tablaProductos.Rows[i].Cells[3].Value.ToString()) + producto.Cantidad;
                    ((ProductoSerializable)proveedor.Productos[i]).Cantidad = ((ProductoSerializable)proveedor.Productos[i]).Cantidad + producto.Cantidad;
                    producto             = null;
                    agregarNuevoProducto = null;
                    return;
                }
            }
            tablaProductos.Rows.Add(new Object[] { producto.IDProducto, producto.Descripcion, producto.Fabricante, producto.Cantidad, producto.Precio, producto.DescripcionDetallada });
            proveedor.Productos.Add(producto);  //Agrega el producto al proveedor
            producto             = null;
            agregarNuevoProducto = null;
        }
コード例 #6
0
        public void eliminarProductoProve(ProductoSerializable eliminarProducto)
        {
            conexion.Open();                //Abre la conexion con la BD

            try
            {
                adaptador = new SqlDataAdapter();
                adaptador.DeleteCommand = new SqlCommand(string.Format("DELETE FROM PROVEEDOR_PRODUCTO " +
                                                                       /*Comando borrar registro del proveedor*/ "WHERE iDProveedor = {0} AND " +
                                                                       "iDProducto = {1}", eliminarProducto.IDProveedor,
                                                                       eliminarProducto.IDProducto), conexion);
                adaptador.DeleteCommand.ExecuteNonQuery(); //Ejecutar comando
                eliminarProducto.AccionCompletada = true;  //La accion se completo correctamente
            }
            catch (Exception e)                            //Hubo un error en la ejecucion del comando
            {
                eliminarProducto.Mensaje = e.Message;
            }

            conexion.Close();               //Cierra la conexion con la BD
        }
コード例 #7
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.";
     }
 }
コード例 #8
0
        private void getProductosRegistrados()
        {
            productosRegistrados        = new ProductoSerializable();
            productosRegistrados.Accion = 3;
            conectorServidor.EnviarAServidor(productosRegistrados);

            //ESPERAR RESPUESTA
            contador = 0;
            while (conectorServidor.ProductoRecibido == null)
            {
                Thread.Sleep(200);
                if (++contador == 10)
                {
                    break;
                }
            }

            productosRegistrados = conectorServidor.ProductoRecibido;
            conectorServidor.ProductoRecibido = null;

            if (productosRegistrados == null || contador == 10)
            {
                cmbDescripcion.Enabled = false;
                MessageBox.Show("No pudieron leerse los productos registrados por otros proveedores.");
                return;
            }

            cmbDescripcion.Items.Add("");

            for (int i = 0; i < productosRegistrados.ProductosRegistrados.Count; i++)
            {
                cmbDescripcion.Items.Add(((ProductoSerializable)productosRegistrados.ProductosRegistrados[i]).Descripcion);
            }

            cmbDescripcion.SelectedIndexChanged += new System.EventHandler(cmbDescripcion_SelectedIndexChanged);
            cmbDescripcion.DropDownStyle         = ComboBoxStyle.DropDownList;
        }
コード例 #9
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;
        }