• Viernes 29 de Marzo de 2024, 09:25

Autor Tema:  Obtener dirección de un archivo [SOLUCIONADO]  (Leído 2505 veces)

NeySmall

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Obtener dirección de un archivo [SOLUCIONADO]
« en: Domingo 20 de Julio de 2014, 20:47 »
0
Hola buen día.   :yes:

Mi problema es que quiero hacer una consulta en c#, de la cual no tengo problema para mostrar los datos consultados. El problema es que al momento de mostrarse la imagen, sale una cruz roja,  :think: motivo del cual da error, (los datos se guardan en MySQL),

El error se debe a que la ruta almacenada en la base de datos se guarda completa: (C:\usuario\.......)  y lo que yo deseo es que solo se guarde la ruta del proyecto que es (Imagenes/Imagen.png) es decir la misma ruta del proyecto, (carpeta debug/imagenes) para que esta pueda usarse en otra PC.

Entonces la pregunta es ¿Cómo hacer que se guarde la direccion del proyecto (carpeta debug).?  :ayuda:

Muestro codigo que tengo en esta parte: (solo la parte del problema)

(OpenFileDialog ---->  DireccionImagen)
(PictureBox ------> ImagenProducto)



Código: [Seleccionar]
private void BtnBuscarImagen_Click(object sender, EventArgs e)
        {
            this.BtnAltaAgregarProducto.Enabled = true;

            DireccionImagen = new OpenFileDialog();

            //Aquí incluiremos los filtros que queramos.
            DireccionImagen.Filter = "Archivos de Imagen|*.png";     
            DireccionImagen.FileName = "";
            DireccionImagen.Title = "Buscando la imagen del producto ";
            DireccionImagen.InitialDirectory = "imagenes";   // abrir la ruta donde están las imagenes (debug/imagenes)

            DireccionImagen.FileName = this.TxtImagen.Text;
 
            // Si esto se cumple, capturamos la propiedad File Name y la guardamos en el control
            if (DireccionImagen.ShowDialog() == DialogResult.OK)
                {
                    this.TxtImagen.Text = DireccionImagen.FileName;
                    this.RutaImagen = DireccionImagen.FileName;   // RutaImagen es variable global para la ruta de la imagen
                    this.ImagenProducto.ImageLocation = this.RutaImagen;
                    this.ImagenProducto.SizeMode = PictureBoxSizeMode.StretchImage;
                }
        }

Muchas gracias de antemano  :adios:
« última modificación: Martes 22 de Julio de 2014, 19:46 por NeySmall »

adel castillo

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re:Obtener dirección de un archivo
« Respuesta #1 en: Martes 22 de Julio de 2014, 09:32 »
0
Hola tal vez te pueda ayudar.
No trabajo con MYSQL, si con SQl Server y facilmente guardo y muestro imagenes de un campo tipo image que guarda mis imagenes como registros tipo byte.
Primero Crear un campo tipo image, eso es muchisimo mejor que direccionar a un archivo por su path del windows, ya que tienes información dispuesta a que te la borren o perderla facilmente, teniendo problemas con el software que desarrollas.

Aqui te escribo los procedimientos en código Vb Net que lo puedes convertir a C#, para mostrar la imagen que desees:

     Public Sub ImportImage(ByVal NameField As String, ByVal FileName As String)
                'NameField = Nombre del campo tipo image en tu tabla
                'FileName= Dirección Path del windows que se direcciona a la imagen que deseas guardar en tu BD.
                'mCmd = Variable tipo SQLCommand que domino mediante una clase propia mia.

                With mCmd
                    .CommandText = "UPDATE [" & mNameTable & "] " & _
                        "SET [" & mNameTable & "].[" & NameField & "]=" & _
                        "(SELECT BulkColumn " & _
                        "FROM OPENROWSET(BULK " & _
                        "'" & FileName & "', " & _
                        "SINGLE_BLOB) AS x)" & _
                        Me.Where(mKey, Operador.Igual)

                    Call .ExecuteNonQuery()
                End With
        End Sub

        Public ReadOnly Property Read_Image(ByVal NameField As String) As Image
            Get
                  'NameField = Nombre del campo tipo image en tu tabla
                  'Me(NameField) = Objeto propio mio que gobierna una tabla de una BD y manipula registros por ubicación y nombre de un campo
                   
                     If NameField IsNot Nothing Then
                        If Trim(Me(NameField).ToString) <> "" Then
                            Dim ms As MemoryStream
                            Dim imgVal As Image

                            ms = New MemoryStream(CType(Me(NameField), Byte()))

                            imgVal = Image.FromStream(ms)

                            Call ms.Close()
                            ms = Nothing

                            Return imgVal
                        End If
                    End If
                 Return Nothing
            End Get
        End Property

Espero entiendas mi código que trabajo con objetos propios de mi creación que manipulan SqlCommand que es el caso de la variale mCmd y una Tabla de una BD donde defino Me(Namefield).

El parametro Me(Namefield) tomalo como el campo tipo image que esta ubicado en un Row de la tabla donde desarrollo el código necesario para transformar sus bytes en formato image.

Espero me entiendas lo desarrollado y te sirva.

Saludos

NeySmall

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re:Obtener dirección de un archivo
« Respuesta #2 en: Martes 22 de Julio de 2014, 19:45 »
0
Gracias adel castillo

Gracias por tu respuesta.
La verdad la estructura y código con MySQL ya las tengo organizados, y no hay problema con ello....
Lo único que queria era saber como guardar en un textbox, la ruta de la imagen, para que el sistema pueda instalarse en otra PC y no haya problemas...
La solucion ya la tengo y la muestro para compartir con quien tenga el mismo problema.

Lo unico que modifique es:
* Agregar una variable tipo string llamada "NombreImagen"
* Modificar el codigo de la condición if

Código: [Seleccionar]
            if (DireccionImagen.ShowDialog() == DialogResult.OK)
                {

                    RutaImagen = this.DireccionImagen.FileName;
                    ImagenProducto.Image = Image.FromFile(this.RutaImagen);
                    this.NombreImagen = this.RutaImagen.Substring(RutaImagen.LastIndexOf("\\") + 1);               
                    this.ImagenProducto.SizeMode = PictureBoxSizeMode.StretchImage;
                    this.TxtImagen.Text = "imagenes/" + this.NombreImagen;
                }

Y en realidad es sencillo, sólo en el textbox puse manualmente entre comillas la ruta de la carpeta del mismo sistema (Debug) que es "imagenes/"
Ademas de agregar el nombre de la imagen.

Lo cual es:
Código: [Seleccionar]
this.TxtImagen.Text = "imagenes/" + this.NombreImagen;
Y con esto:
Código: [Seleccionar]
this.NombreImagen = this.RutaImagen.Substring(RutaImagen.LastIndexOf("\\") + 1);
obtengo el nombre de la imagen.

Gracias por tu ayuda.
Y comparto mi solución.

Saludos :jumpie: