SoloCodigo
CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: NeySmall en Domingo 20 de Julio de 2014, 20:47
-
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)
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:
-
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
-
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
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:
this.TxtImagen.Text = "imagenes/" + this.NombreImagen;
Y con esto:
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: