none
Problemas al cargar imagen en BD Mysql RRS feed

  • Pregunta

  • Bueno primero que nada un saludo a todos, soy estudiante de la carrera de ing en informatica en mi pais y hoy me presento aqui ya que tengo un problema en el cual estoy estancado hace 2 dias.

    Estoy realizando un sistema en windows form en 3 capas (negocio, datos,entidad (y presentacion claro)) y no logro cargar una imagen a mi BD en MYSQL

    El campo de la imagen es tipo blob ya que investigando descubrí que este es uno de los mejores métodos y cargue imagenes directamente desde MYSQL y estas las logre cargar en un picturebox en mi form principal, el problema es que no logro encontrar la manera de cargar la imagen ya que por alguna razón no logro darle el formato adecuado del tipo byte[]

    Les presento a continuación como busco realizarlo:

    Capa de presentacion:

    //Metodo para convertir imagen a byte[]

    public static byte[] Image2Bytes(Image pImagen)
            {
                byte[] mImage = null;
                try
                {
                    if (pImagen != null)
                    {
                        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                        {
                            pImagen.Save(ms, pImagen.RawFormat);
                            mImage = ms.GetBuffer();
                            ms.Close();
                        }
                    }
                    else { mImage = null; }
                }
                catch (Exception ex)
                {
                    throw (ex);
                }
                return mImage;
            }

    //Boton de insertar

    private void button2_Click(object sender, EventArgs e)
            {
                
                string nombre = txtNombre.Text;
                int precio = Convert.ToInt32(txtPrecios.Text);
                string descripcion = rtxtDescripcion.Text;
                byte[] foto = Image2Bytes(pictureBox1.Image);
                int categoria = 1;
                int estado = 1;

                if (txtNombre != null)
                {
                    _insertar.Insertar(nombre, precio, foto, descripcion, categoria, estado);
                    
                    MessageBox.Show("Registros ingresados");

                }
                else
                {
                    MessageBox.Show("Registro ya existe");
                }

            }

    Capa de negocio

     public class InsertarCafe
        {
            Datos.CargarCafe agregar = new Datos.CargarCafe();
           


            public int Insertar(string nombre, int precio, byte[] imagen,string descripcion, int categoria, int estado )
            {
                return agregar.IngresarCafe(nombre, precio, imagen, descripcion, categoria, estado);
                

            }

    capa de datos:

    public class CargarCafe
        {
            public static String con()
            {
                String conn = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
                return conn.ToString();
            }


            public int IngresarCafe(string nombre, int precio,byte[] imagen, string descripcion, int categoria, int estado )
            {

                int a = 0;
                MySqlConnection connection = new MySqlConnection();

                try
                {
                    MySqlCommand cmd1 = new MySqlCommand("INSERT INTO `producto` (`Nombre_del_menu`, `Precio`, `Imagen`, `Descripcion_del_plato`, `Categoria_idCategoria`, `EstadoProducto_idEstado` ) VALUES ('" + nombre + "','" + precio + "', '" +imagen + "', '" + descripcion + "', '" + categoria + "', '" + estado + "')", connection);
                    cmd1.CommandType = CommandType.Text;
                    connection = new MySqlConnection(con());
                    cmd1.Connection = connection;
                    connection.Open();
                    cmd1.ExecuteNonQuery();
                    a = 1;


                    return a;
                }
                catch (Exception e)
                {
                    e.ToString();
                    return a;
                }
                finally
                {
                    connection.Close();
                }


            }
        }

    El problema que tengo recae en que si se realiza la carga de los datos a la BD, pero la imagen que se carga no se muestra porque al parecer la conversión que hago a byte[] es incorrecta, pero ya proble unos 12 metodos distintos y ninguno me ha funcionado y por eso les pido ayuda en esto ya que debo entregarlo en 1 semana mas y solo necesito resolver el tema de las imagenes para poder terminar mi proyecto

    Agradezco su ayuda de antemano

    miércoles, 11 de octubre de 2017 1:01

Respuestas

  • logre solucionar el problema, aquí dejo la solución que se trato en otro post

    https://social.msdn.microsoft.com/Forums/es-ES/8b470ba1-463b-47a5-8845-43575f13f746/problemas-al-cargar-imagen-en-bd-mysql-3-capas?forum=vcses#006c75e1-b240-49e8-b3a0-c6c3d0485082

    • Marcado como respuesta Juliojvv sábado, 28 de octubre de 2017 21:10
    sábado, 28 de octubre de 2017 21:10

Todas las respuestas

  • [...] la conversión que hago a byte[] es incorrecta, pero ya proble unos 12 metodos distintos y ninguno me ha funcionado [...]

    No lo hagas. Lo correcto es parametrizar la sentencia y asignar el byte[] al parámetro. El propio driver de la base de datos lo convertirá internamente al formato correcto.

    Esta es una de las muchas razones por las que las sentencias SQL siempre se deber parametrizar, y nunca debes concatenar en la sentencia datos introducidos por un usuario. Otras razones son las de evitar ataques de inyección de SQL, evitar polucionar el caché de procedimientos en el servidor, y evitar problemas de formato en los datos (no solo byte[], sino también fechas o números con decimales, por ejemplo).

    https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-parameters.html

    • Propuesto como respuesta Jorge TurradoMVP miércoles, 11 de octubre de 2017 7:03
    miércoles, 11 de octubre de 2017 6:18
  • logre solucionar el problema, aquí dejo la solución que se trato en otro post

    https://social.msdn.microsoft.com/Forums/es-ES/8b470ba1-463b-47a5-8845-43575f13f746/problemas-al-cargar-imagen-en-bd-mysql-3-capas?forum=vcses#006c75e1-b240-49e8-b3a0-c6c3d0485082

    • Marcado como respuesta Juliojvv sábado, 28 de octubre de 2017 21:10
    sábado, 28 de octubre de 2017 21:10