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 }
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 }
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(); } }
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; } }
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; }
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 }
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."; } }
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; }
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; }