none
guardar imagen

    Pregunta

  • Hola,
    cargo una imagen desde C# en un picturebox i ahora quiero guardar la imagen en la base de datos, como puedo hacerlo??
    la base de datos es con sql server 2000, se que hay el campo image xo me da error al insertarlo, alguien tiene un ejemplo o solucion??? gracias!!!!!!!!!!
    martes, 22 de mayo de 2007 9:44

Respuestas

Todas las respuestas

  • Esta respuesta la dío un compañero (José A. Fernandez) de las NewsGroup:

     

    Mira estos ejemplos de tratamiento de archivos binarios
        - Working with Binary Files
          http://www.asp.net/learn/dataaccess/default.aspx?tabid=63#binary
    Donde tienes tutoriales de:
       #54 | Uploading Files
       #55 | Displaying Binary Data in the Data Web Controls
       #56 | Including a File Upload Option When Adding a New Record
       #57 | Updating and Deleting Existing Binary Data

    Como para empezar... luego puedes buscar otros ejemplos
      - http://www.codeproject.com/aspnet/ASPImaging1.asp

    Save An Image Into SQL Server 2000 Database
    http://www.codeproject.com/aspnet/PicManager.asp

    Storing and Retrieving Images from SQL Server using Microsoft .NET
    http://www.codeproject.com/cs/database/ImageSaveInDataBase.asp

    Images, Thumbnails, SQL Server, and ASP .NET
    http://codebetter.com/blogs/eric.wise/archive/2005/05/15/63236.aspx

     

    Salu2

     

    Colabora con el foro: Si la respuesta te es de utilidad marca la pregunta como respondida.

    Luis Ruiz Pavón

    MCP

    Blog: http://geeks.ms/blogs/lruiz

    martes, 22 de mayo de 2007 9:55
  • Básicamente, guardas la imagen en un MemoryStream, luego utilizas GetBuffer() para colocar el contenido del stream en el parámetro apropiado del SQLCommand y finalmente invocas a tu stored procedure. Algo así:


    Code Snippet
     System.IO.MemoryStream ms = new System.IO.MemoryStream();
     miPictureBox.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
     cmd.Parameters["@imagen"].Value = ms.GetBuffer();

     

    En este link puedes ver un ejemplo completo paso a paso:

     

    http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/MTJ_3966.asp

     

    Espero te sea de utilidad.

    martes, 22 de mayo de 2007 13:48
  • gracias!!!!
    pero mirad que me ocurre.
        He encontrado esta funcion:
            public byte[] Image2Bytes(Image img)
            {
                string sTemp = Path.GetTempFileName();
                FileStream fs = new FileStream(sTemp, FileMode.OpenOrCreate,        FileAccess.ReadWrite);
                img.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
                fs.Position = 0;
                //
                int imgLength = Convert.ToInt32(fs.Length);
                byte[] bytes = new byte[imgLength];
                fs.Read(bytes, 0, imgLength);
                fs.Close();
                return bytes;
            }


    porque segun he leído en Sql Server 2000 se guarda un conjunto de bytes, el problema lo tengo cuando asigno esta funcion a la comanda Sql Server como por ejemplo:

    "INSERT INTO [dbo].TablaFoto(foto) VALUES ('"  + Image2Bytes(imagen) + "')";
    el valor que contiene es System.bytes[], i no el contenido o la coleccion de bytes.

    alguien tiene la solucion????????????????????????
    martes, 22 de mayo de 2007 15:05
  • Hola compañero:

     

    A ver no puedes concatenar los bytes de la imagen tal cual en la cadena , necesitas definirte un parametro en la query, es decir parametrizarla.

     

    En los enlaces que te hemos pasado antes tienes como se hace, miralos.

     

    Salu2

     

    Colabora con el foro: Si la respuesta te es de utilidad marca la pregunta como respondida.

    Luis Ruiz Pavón

    MCP

    Blog: http://geeks.ms/blogs/lruiz

    martes, 22 de mayo de 2007 15:24
  • Luis tiene razón, no encadenes la imagen de esa manera, usa SQLParameters. Por otro lado, veo que tu función usa un FileStream. Ahí lo que estás haciendo es guardar a disco la imagen y de allí la vuelves a tomar para enviarla a SQL. Creo que usar un MemoryStream sería mucho más eficiente, porque manejas todo en memoria.

     

    Please revisa el link que te pasé, ahí te explican todo paso a paso.

     

    Saludos,

    martes, 22 de mayo de 2007 15:48
  • gracias, me ha ido perfecto ha sido muy util!!!!!!!!!!!!!
    miércoles, 23 de mayo de 2007 11:27
  • Genial!

     

    Marca el hilo como contestado.

     

    Gracias!

    miércoles, 23 de mayo de 2007 15:04
    Moderador
  • Algunas veces al guardar una imagen me sale esta excepción. error los datos de cadena o binarios se truncarian. alguien sabe a que es debido???
    viernes, 25 de mayo de 2007 12:11
  • Que tipo de datos estas usando en SQL Server???

     

    Como insertas la imagen???

     

    Salu2

     

    Colabora con el foro: Si la respuesta te es de utilidad marca la pregunta como respondida.

    Luis Ruiz Pavón

    MCP

    Blog: http://geeks.ms/blogs/lruiz

    viernes, 25 de mayo de 2007 12:24
  • lo hago como me dijo julio casal:

    System.IO.MemoryStream ms = new System.IO.MemoryStream();
     miPictureBox.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
     cmd.Parameters["@imagen"].Value = ms.GetBuffer();

    podria ser si la imagen no fuera con Jpeg??? lo q tampoco se cumple siempre, sino que a veces peta xo no en contrado porque.
    viernes, 25 de mayo de 2007 12:45
  • Qué tamaño, en promedio, tienen las imágenes que sí se insertan con éxito y qué tamaño tienen las imágenes que te dan problemas?

     

    Saludos,

    viernes, 25 de mayo de 2007 13:47
  • la verdad es que he hecho pruebas casi siempre con la misma imagen, es algo muy raro, xo anque me de este error, comienzo a pensar que los que causan el fallo son los otros campos de la tabla si no son correctos.
    viernes, 25 de mayo de 2007 14:29
  • Pues sí amigo, verifica por favor la longitud de los otros campos de tu tabla y asegúrate de que no estés enviando cadenas más grandes de lo que soportan esos campos. Yo he revisado el ejemplo que te pasé extensamente, tanto con SQL Server 2000 como con SQL Server 2005 y me funciona sin ningún problema, incluso cuando le inserto una imagen de tipo bmp con un tamaño de 48Mb (que es bastante grande).

     

    Si me copias la estructura de tu tabla y tu código ADO.NET que usas para hacer el INSERT pues tal vez te pueda ayudar mejor.

     

    Saludos,

    Julio.

    viernes, 25 de mayo de 2007 15:11
  • En el Lenguaje de programacion C#. Eso lo logras con el comando lo_insert y lo_import de sql, te mando los codigos.

     

     

    Debes tener los controladores de Npgsql, que es un archivo .dll

    Espero ya lo tengas, das de alta dichas referencias

     

    arriba de tu formulario donde lo usas pones:

     

    using NpgsqlTypes;

    using Npgsql;

     

     

    en el load de tu formulario por lo regular abres conexion a tu base de datos

     

    conConection.Open();// conConection  es   nombre de la conexion

     

    Declaras tu variable:

    NpgsqlCommand comando = new Npgsql.NpgsqlCommand();

     

    comando.CommandText="select lo_export (calcos_mt.imagen, 'C:\\Calcos Tacticos\\"+nombre+"') from calcos_mt where nombre ='"+ nombre ;

    comando.Connection= conConection;

     

    calcos_mt es el nombre de mi tabla.

    nombre es una variable en la cual yo desde un textBox le asigno un nombre, si quieres primero prueba el codigo desde sql

    y ya despues lo implementas a un leguaje.

     

    Si tienes alguna duda me mandas un correo.

    ricramo@hotmail.com

     

     

     

     

     

     

    martes, 03 de julio de 2007 17:56
  • Buen dia jovenes!!

    Dentro de este tema quiero realizar un storeprocedure para pasar los datos de una tabla a otra, ya he declarado mis variables en el storeprocesure, ahora lo que quiero realizar es pasar un campo image de mi primer tabla  a otro campo image de la otra tabla, solo que no se como se puede realizar, ya que no me acepta campos text, ntext e image en las subconsultas, yo habia pensado en alguna funcion para convertir la imagen en binario y biceberza, pero no se si se pueda y como se pueda hacer.
    jueves, 18 de diciembre de 2008 15:19
  • Hola,

    Para esto abre un hilo nuevo.

    Un saludo.
    jueves, 18 de diciembre de 2008 15:26
    Moderador
  • como ir buscar uma imagem em c#?
    Vitor
    miércoles, 15 de julio de 2009 10:21
  • buenas yo tengo un problema parecido ,estoy trabajado con sql 2005 y tengo un campo llamado Foto con el tipo de dato image .

    en mi clase intancia

    public

    Byte Fotografia { get; set; }

    y en mi procedimiento

    db.AddInParameter(SQL,

    "@Foto", DbType.Byte , eregistrar.Fotografia);

     y a la hora de guarda la imagen lo convierto

    System.IO.

    MemoryStream ms = new System.IO.MemoryStream

    ();

    pictureBox1.Image.Save(ms, System.Drawing.Imaging.

    ImageFormat.Jpeg);

    y le mando el Fotografia =ms.GetBuffer().

     pero nose puede guardar me sale error nose si me podrian ayudar estoy trabajan por capas esepro su respuesta gracias

    miércoles, 17 de agosto de 2011 22:32
  • Hola,

    Veo un  problema de tipos

    1. Byte Fotografia { getset; }

    Esto debe de ser Byte[] Fotografia { getset; }

     

     

    2. db.AddInParameter(SQL,"@Foto"DbType.Byte , eregistrar.Fotografia);

    Esto no se como lo tienes definido a nivel de base de datos pero creo que el tipo correcto sería DbType.Binary

     

    Saludos,

     



    phurtado
    miércoles, 17 de agosto de 2011 22:50
    Moderador
  • :-)
    Hola,

    Dale un vistazo a este post en el que muestro diferentes formas de convertir imagenes a array de bytes y viceversa.

    Redimensionar imágenes, convertirlas a byte array y viceversa (con transparencia):

    http://geeks.ms/blogs/lfranco/archive/2010/12/27/redimensionar-im-225-genes-convertirlas-a-byte-array-y-viceversa-con-transparencia.aspx

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    jueves, 18 de agosto de 2011 14:17
    Moderador
  • Hola,

    Fotograria es del Typo System.Drawing.Image. Si esto es así tienes que hacer lo siguiente

     

    1. Aplicar la tecnica de este link para leer los bytes para el campo Fotografía, con eso consigues crear un array de bytes.

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getbytes.aspx

    2. Despues tienes que guardar los  bytes conseguidos en el punto 1 en un MemoryStream utilizando el metodo Write.

    3. Fotografia = Imagen.FromStream(<aqui tienes que pasar el MemoryStream creado en el segundo punto>);

     

    El error que te da es porque una imagen no es byte que es lo que estás leyendo con esta sentencia lector.GetByte (1)

     

    Saludos,

     

     


    phurtado
    martes, 23 de agosto de 2011 0:16
    Moderador
  • buenas noches , ya me dio que me confundi nose si estara bien para guarda una imagen a byte lo hice de esta manera pero sale un error.

    en mi base de datos tengo el campo foto del tipo image.

     y tengo declarado mi variable en una clses

    public byte[] Fotogra { get; set; }--> si en vez de byte [] lo cambio por object podrias ??

    y en mi otra clse tengo

    public

    String registrarPaciente(epaciente eregistrpaciente)

    db.AddInParameter(SQL,

    "@Foto", DbType.Binary , eregistr.Fotografia);

    y a la hora de mandar la imagen lo convierto asi

    System.IO.

    pictureBox1.Image.Save(ms, System.Drawing.Imaging.

    MemoryStream ms = new System.IO.MemoryStream (); ImageFormat .Jpeg);

     byte[] pic = ms.ToArray();

    y le mando a

    estoy q trbajo por capaz nose si me puede ayudar

    Fotografia = pic.

     

     

     

     

     

    martes, 23 de agosto de 2011 3:13
  • Hola,

     ya me dio que me confundi no se si estara bien para guarda una imagen a byte lo hice de esta manera pero sale un error.

    Puedes pasar el error que te da es decir

    1.Exception

    2.InnerException si no es nulo

    3.StackTrace

    Esto nos dejara claro cual es el error, de esta forma es imposible saber que es lo que pasa.

    Puedes pasar también el metodo registrarPaciente completo y db.AddInParameter

     

    Te paso un codigo sencillo que guarda una imagen en BB.DD.

     

    1. Script Sql para crear una tabla con nombre imagenes

    create table imagenes
    (
    	id int primary key,
    	imagen image 
    )
    


    2. Codigo c# para guardar esa imagen en la BB.DD. solo tienes que cambiar la ruta de la imagen y la cadena de conexion.

    string query = "insert into imagenes(id,imagen) values(@id,@imagen)";
          byte[] Foto = null;
          Image im = Image.FromFile("<Tu ruta donde esta la imagen>");
          using (MemoryStream ms = new MemoryStream())
          {
            im.Save(ms, im.RawFormat);
            Foto = ms.ToArray();
    
          }
          
          using (SqlConnection conn = new SqlConnection("<Tu Cadena de Conexion>"))
          {
            conn.Open();
    
            SqlCommand command = new SqlCommand(query, conn);
    
            command.Parameters.AddWithValue("@id", 1);                
            command.Parameters.AddWithValue("@imagen",Foto);
            command.ExecuteNonQuery();
            
            
            
            
          }
    


    Te solicito todo eso porque no das información para conocer cual es el problema :)

     

    Saludos,




     


    phurtado
    martes, 23 de agosto de 2011 9:54
    Moderador
  • bueno ya guarde pero a la hora que deseo leerlo , no se como hacerlo lo estaba haciendo asi.

    tengo declarado

    public

    byte[] Fotografia { get; set; }


    y en mi otra clase

     

    public epersona buscar(Int32 IdDNI)

    {

     

    DbCommand SQL = db.GetSqlStringCommand("SELECT Nombres,isnull(Foto,'No Disponible') FROM TbPersona where DNI = @codN ");

    db.AddInParameter(SQL,

    "codN", DbType.Int32, IdDNI);

     

    IDataReader lector = db.ExecuteReader(SQL);

     

    epersona objeto = null;

     

     

    while (lector.Read())

    {

    objeto =

     

    new epersona ()

    {

    Nombres= lector.GetString(0),

    Fotografia= lector.GetBytes (1)--> en esta parte sale el error dice q falta argumentos

    };

    }

     return objeto;

    }

    no se si me podrian ayudar ,estoy q trabjo por capaz y el erro dice q falta argument oen lector.getbytes

    martes, 23 de agosto de 2011 17:39
  • Hola,

    En una respuesta de este hilo te comente cual es la técnica que tenias que utilizar para leer la imagen.

     

    En este link tienes al final del todo un codigo ese es el que tienes que utilizar.

     

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getbytes.aspx


     

     ind ndx = rdr.GetOrdinal("<ColumnName>");
          if(!rdr.IsDBNull(ndx))
          {
          long size = rdr.GetBytes(ndx, 0, null, 0, 0); //get the length of data
          byte[] values = new byte[size];
    
          int bufferSize = 1024;
          long bytesRead = 0;
          int curPos = 0;
    
          while (bytesRead < size)
          {
            bytesRead += rdr.GetBytes(ndx, curPos, values, curPos, bufferSize);
            curPos += bufferSize;
          }
          }
    

     

    Justo después de esto

     

     

     while (bytesRead < size)
          {
            bytesRead += rdr.GetBytes(ndx, curPos, values, curPos, bufferSize);
            curPos += bufferSize;
          }
    

     

     

    Copia lo siguiente.

    using (MemoryStream ms = new MemoryStream(Values))
          {
            Fotografia = Image.FromStream(ms);
          }
    


    Ese error que te da es porque GetBytes del objeto DBDataReader tiene 5 parametros y tu solo pasas el primero de ellos, ese es el error, fijate en el código que te he pasado en el primer bloque y veras como se utilizan los cinco.

     

    Te recomiendo que realices esta lectura http://msdn.microsoft.com/es-es/library/system.data.common.dbdatareader.getbytes.aspx, para que te quede claro lo que te comento, de todas formas en el anterior link lo tienes igual.

     

    Saludos,


    phurtado
    martes, 23 de agosto de 2011 19:19
    Moderador
  • buenas tarde estube leyendo lo que me paso y las indicaciones y esta asi pero tengo alguno errore . que estan con palabras negritas estan los errores

    public epaciente buscarpaciente(Int32 IdDNI)

      

     DbCommand SQL = db.GetSqlStringCommand("SELECT Nombres,isnull(Foto,'No Disponible') FROM TbPersona where DNI = @codN ");

    db.AddInParameter(SQL, "codN", DbType .Int32, IdDNI); 

    IDataReader lector = db.ExecuteReader(SQL);

     //

     

     

    int ndx= lector.GetOrdinal("Foto");--> aqui le puse int ndx porque no sale el nde que era integer se supone

     if (!lector.IsDBNull(ndx)) 

     long size = lector.GetBytes(ndx, 0, null, 0, 0);

     byte[] values = new byte[size];

    int bufferSize = 1024;

     long bytesRead = 0;

     int curPos = 0;

      while(bytesRead < size)

     {

    bytesRead += lector.GetBytes(ndx, curPos, values, curPos, bufferSize);

    }

    using (MemoryStream ms = new MemoryStream (values))

    {

    Fotografia= Image.FromStream(ms);

    EN ESTA PARTE COMO LO LLAMO IMAGE  NO SALE  y si pongo fotografia no lo reconoce porque no esta dentro del objeto

    }

    }

     

     epaciente objeto = null

    while (lector.Read())

    ;

    curPos += bufferSize;

    {

    objeto = new epaciente()

     

    Nombres= lector.GetString(0),

    Fotografia= lector.GetBytes( (1)

    };

    }

     

     

    {
    espero su respuesta y muchas gracias por su ayuda hasta ahora

    martes, 23 de agosto de 2011 22:20
  • Hola,

    Fijate en la siguiente instrucción

     

    SELECT Nombres,isnull(Foto,'No Disponible') FROM TbPersona where DNI = @codN 

    1. Para que haces esto, es decir si el campo Foto definido como Imagen es null, lo conviertes a cadena y devuelves 'No Disponible', esto ya lo controlas con esta linea

     if (!lector.IsDBNull(ndx)) 

    2. Esa instrucción provoca que el nombre de la  segunda columna no se llame Foto y por tanto cuando ejecutas

    int ndx= lector.GetOrdinal("Foto");

    Te salta una exception del Tipo  IndexOutOfRangeException con el mensaje "Foto";

    Es tan sencillo como escribir la query de la siguiente forma

    SELECT Nombres,Foto FROM TbPersona where DNI = @codN 

     

    EN ESTA PARTE COMO LO LLAMO IMAGE  NO SALE y si pongo fotografia no lo reconoce porque no esta dentro del objeto

    Hay algo que te impida realizar esto dentro del objeto que por lo que veo es epaciente o escribir epaciente.FotograFia donde estes leyendo. 

     

    Todo esto no te hace falta para nada

    epaciente objeto = null

    while (lector.Read())

    ;

     

    curPos += bufferSize;

     

    {

    objeto = new epaciente()

     

    Nombres= lector.GetString(0),

    Fotografia= lector.GetBytes( (1)

    };

    Suprimelo.

     

    Saludos,

     

     


    phurtado
    miércoles, 24 de agosto de 2011 0:13
    Moderador
  • bueno ya usted dice que deberi ser asi

     

    DbCommand SQL = db.GetSqlStringCommand("SELECT Nombres,Foto FROM TbPaciente where DNI = @codN ");

    db.AddInParameter(SQL,

    "codN", DbType

    .Int32, IdDNI);

     

     

    IDataReader lector = db.ExecuteReader(SQL);

     

    int ndx= lector.GetOrdinal("Foto"); // y dice que esto es para que el nombre del campo no se llame foto

    pero usted me paso est codigo y que por cierto ind no existe en c#

    ind ndx = rdr.GetOrdinal("<ColumnName>");
          if(!rdr.IsDBNull(ndx))
          {
          long size = rdr.GetBytes(ndx, 0, null, 0, 0); //get the length of data
          byte[] values = new byte[size];

          int bufferSize = 1024;
          long bytesRead = 0;
          int curPos = 0;

          while (bytesRead < size)
          {
            bytesRead += rdr.GetBytes(ndx, curPos, values, curPos, bufferSize);
            curPos += bufferSize;
          }
          }

     
     


    nose si me podria ayudar porque hay parte que no enteindo bien muchas gracias por su tiempo y su ayuda
    miércoles, 24 de agosto de 2011 1:06
  • Hola,

    // y dice que esto es para que el nombre del campo no se llame foto

     

    Justo al conrtrario lo que digo con esta frase 

    2. Esa instrucción provoca que el nombre de la  segunda columna no se llame Foto y por tanto cuando ejecutas

    Era refiriendome a esta sentencia SELECT Nombres,isnull(Foto,'No Disponible') FROM TbPersona where DNI = @codN 

    Esta es la que provoca que no puedas acceder desde reader al campo Foto desde esta instrucción int ndx= lector.GetOrdinal("Foto");

    nose si me podria ayudar porque hay parte que no entiendo.

    Ayudarte siempre, dime que es lo que no entiendes y te explico lo que quieras.

     

    Saludos, 


    phurtado
    miércoles, 24 de agosto de 2011 16:40
    Moderador
  • buenas entonce el codigo q le pase esta bien todo ?

    tengo el codigo de esta forma pero using (memorystream nose como hacerlo , y aparte image no se puede instanacia ni fotografia porque no esta dentro del objeto, espero su respuesta gracias

            public epaciente buscarpaciente(Int32 IdDNI)
            {
                DbCommand SQL = db.GetSqlStringCommand("SELECT    Nombres,Foto FROM TbPaciente where DNI = @codN ");
                db.AddInParameter(SQL, "codN", DbType.Int32, IdDNI);
                IDataReader lector = db.ExecuteReader(SQL);
               //
                 int ndx= lector.GetOrdinal("Foto");
                 if (!lector.IsDBNull(ndx))
                {
                    long size = lector.GetBytes(ndx, 0, null, 0, 0); //get the length of data
                    byte[] values = new byte[size];
                    int bufferSize = 1024;
                    long bytesRead = 0;
                    int curPos = 0;

                    while (bytesRead < size)
                    {
                        bytesRead += lector.GetBytes(ndx, curPos, values, curPos, bufferSize);
                        curPos += bufferSize;
                    }
               
                using (MemoryStream ms = new MemoryStream(values))
                {
                     Fotgrafia= Image.FromStream(ms);
                }
                 }

                epersonaobjeto = null;
                while (lector.Read())
                {
            
                    objeto = new epersona()
                    {

                         Nombres= lector.GetString(0),
                         Fotografia= lector.GetBytes (1)

                    };
                }
                return objeto;
            }

    miércoles, 24 de agosto de 2011 21:06
  • Hola,

     

    Si está bien solo veo que te falta esto

     

    using (MemoryStream ms = new MemoryStream(Values))
       {
        epaciente.Fotografia = Image.FromStream(ms);
       }
    

    Saludos,

     


    phurtado
    miércoles, 24 de agosto de 2011 21:26
    Moderador
  • esta parte

    using (MemoryStream ms = new MemoryStream(Values))
      {
      epaciente.Fotografia = Image.FromStream(ms);
      }
    

    que usted señala no se puede declar epaciente.fotografia 
    creo que deberia ser algo asi 

     

    using (MemoryStream ms = new MemoryStream(values))

    {

     

    epaciente objeto = null;

     

    while (lector.Read())

    {

     

    objeto =

    new epaciente()

    {

    Nombres= lector.GetString(0),

    Fotografia= Image.FromStream(ms) (1)

    };

    }

     

    return objeto;

    algo asi y tambien Image no puede ser llamdo , espero su respuesta gracias

     
    miércoles, 24 de agosto de 2011 21:40
  • Hola, 

    Puede ser así. no le veo ningún problema. 

    Pero con eso debe de funcionar que problema tienes ahora . que significa "algo asi y tambien Image no puede ser llamdo , espero su respuesta gracias " .

    De verdad te digo qe no entiendo la frase no encuetras Image ¿Te da errores lo que has pasado?, ¿que error?.

    Es dificil resolver dudas de esta forma, puedes ser un poco más claro.

     

    Lo único que se me ocurre es que Image pertenece a System.Drawing y te falte en el archivo un using a este Namespace o bien que utilices System.Drawing.Image.FromStream(ms), no escribas

    Image.FromStream(ms(1), ya con las indicaciones que te pase has accedido al campo (1) cuando hiciste la lectura de los bytes[] para despues convertir estos en Imagen.

     


     

     

    while (lector.Read())

    {

     

    Aqui es donde tienes que poner el resto del codigo no en otro sitio.

    objeto =

    new epaciente()

    {

    Nombres= lector.GetString(0),

    Fotografia= Image.FromStream(ms) (1)

    };

    }

     

    Intenta revisar todo el hilo y si lo necesitas te hago un ejemplo completo de como leer una imagen de una base de datos. Perdona pero veo que cada vez cambias algo, esto no es valido  Image.FromStream(ms) (1) con esta linea nt ndx= lector.GetOrdinal("Foto"); ya accediste al campo (1).

    .

    Saludos,

     


    phurtado
    jueves, 25 de agosto de 2011 0:28
    Moderador
  • buenas no puedo usar el using.system.drawing,image no se puede invocar

    tambien lo hize de la forma que me sugerio de system,drawing.image.FromSTream pero tampoco sale

    solo sale hasta system , el .drawing no reconoce espero su respues muchas gracias

    miércoles, 31 de agosto de 2011 19:46
  • :)
    Hola,

    Debes afregar la referencia a System.Drawing en tu proyecto.

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    • Propuesto como respuesta Panchistelroy jueves, 01 de septiembre de 2011 21:22
    • Votado como útil Panchistelroy jueves, 01 de septiembre de 2011 21:22
    jueves, 01 de septiembre de 2011 6:47
    Moderador
  • ahora tengo otra duda mi codigo quedo armado asi

    DbCommand

    SQL = db.GetSqlStringCommand("SELECT Nombres,Foto FROM TbPersona where DNI = @codN ");

    db.AddInParameter(SQL,

    "codN", DbType.Int32, IdDNI);

     

    IDataReader lector = db.ExecuteReader(SQL);

     

    epersona objeto = null;

     

    while (lector.Read())

    {

     

    int ndx = lector.GetOrdinal("Foto");

     

    if (!lector.IsDBNull(ndx))

    {

     

    long size = lector.GetBytes(ndx, 0, null, 0, 0); //get the length of data
     

     

    byte[] values = new byte[size];

     

    int bufferSize = 1024;

     

    long bytesRead = 0;

     

    int curPos = 0;

     

    while (bytesRead < size)

    {

    bytesRead += lector.GetBytes(ndx, curPos, values, curPos, bufferSize);

    curPos += bufferSize;

    }

     

    using (MemoryStream ms = new MemoryStream(values))

    {

     

    epersona a=new epersona ();

    a.Fotografia= System.Drawing.

    Image.FromStream(ms);

    }

    }

    objeto =

    new epersona ()

    {

    Nombres= lector.GetString(0)

    };

    }

     

    return objeto;

    a la hora de compilar no me genera ningun error

    pero a la hora de buscar la imagen no me aparece nada

    asi le pase el dato al pictureBox1.Image = ( persona.buscarpersona(dni).Fotogra);

    nose cual es mi error espero sus respuesta muchas gracias

    jueves, 01 de septiembre de 2011 21:27
  • Hola,

     

    Veo que has avanzado bastante :)

     

    Lo más facil es hacer lo sigiente sustituir 

    epersona objeto = null;

    por 

    epersona objeto = new eporssona(),

     

    Y despues esto 

     

    using (MemoryStream ms = new MemoryStream(values))

    {

     

    epersona a=new epersona ();

    a.Fotografia= System.Drawing.

    Image.FromStream(ms);

    }

    }

    objeto =

    new epersosna ()

    {

    Nombres= lector.GetString(0)

    };

    lo cambias por esto

     

    using (MemoryStream ms = new MemoryStream(values))
    {
    
    objeto.Fotografia= System.Drawing.Image.FromStream(ms);
    }
    
    }
    
    objeto.Nombres =lector.GetString(0);
    
    

    Saludos,

     

     

     


    phurtado
    jueves, 01 de septiembre de 2011 21:37
    Moderador
  • ya hice las modificaciones que me sugeriste , complina normal y corre .

    pero el problema esque no me muestra la imagen ,nose si ,lo he pasado mal ,porque quiero mostrarlo en un picturebox  y lo tengo de esta forma

     pictureBox1.Image = ( persona.buscarpersona(dni).Fotogra);

    bueno espero su respuesta muchas gracias

    viernes, 02 de septiembre de 2011 3:45
  • Hola,

     

     pictureBox1.Image = ( persona.buscarpersona(dni).Fotogra);

     

    Esto está bien es Fotogra o Fotografia ?

    Saludos,


    phurtado
    lunes, 05 de septiembre de 2011 14:16
    Moderador
  •  es fotografia si lo escribi bien. recien me dado cuenta que me generaba un error por el tipo de  dato.Pero  ya lo aregle, muchas gracias por tu ayuda desde inicio (Y) .Muchas gracias

    lunes, 05 de septiembre de 2011 21:01
  • hola buenas tengo una consulta , tengo un datagriveview cargado de datos con nombres y apellidos. y quiero al escribir en un texbox me vaya filtrando el contenido pero sin ahcer ninguna consulta a la BD de datos sino trabajar con los mismo datos cargado inicialmente. nose si me podria ayudar . se que se utiliza el eventon textchange del textbox pero nose que mas podria ser gracias espero sus respuestas
    sábado, 10 de septiembre de 2011 18:30
  • Hola,

    Imagino que puede ser un DataTable el DataSource del DataGridView. Puedes hacer lo siguiente en el evento changed del TextBox o con el click de un Button, realizar lo siguiente.

    DataTable t = this.DataGridView1.DataSource as DataTable;
    if (t!=null)
    {
           DataRow[] Filas= t.Select(string.Format("Apellidos ='{0}'", this.TextBoxt1.Text);
    }
    


    En Filas tendrás todas las que cumplan con la selección, si el criterio de búsqueda es díferente a "=" , consulta este hilo donde se trato el comando Select sobre DataTable.

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/b4c895db-d875-43f5-939f-78ea42990a6a#f6e058e7-43d9-43cf-b220-5ce9bdcf305d

     

    Una cosa intenta abrir un nuevo hilo para las consultas que hagas, no las pongas todas en el mismo, puesto que se tratan temas diferentes y no aporta nada al resto.

    Saludos,


    phurtado
    sábado, 10 de septiembre de 2011 19:11
    Moderador
  • aya no sabia , pero igual no me busca nada en mi datagrivew, aparte tuve otro problema con las imagenes,  puedo guardar y ver la imagen,todo nomal . por ejemplo

    tengo en un datagrivew  datos de persona con sus imagenes y cuando esos datos  los paso a caja de texto y a un picturebox la imagen normal hast ahi pero cuando quiero editar solo los datos y mantener la misma imagen me guarda y no me sale ningun error pero cuando quiero ver si los datos se actualizaron me sale un error

    objeto.Fotogra=System.Drawing.

    Image.FromStream(ms);

    diciendo que este parametro no es valido.

    tambien el mismo error me sale cuando cambio la imagen por otra

    nose si me habras entendido ese es mi problema que tengo . bueno espero tu respuesta gracias


    domingo, 11 de septiembre de 2011 0:51
  • aya no sabia , pero igual no me busca nada en mi datagrivew, aparte tuve otro problema con las imagenes,  puedo guardar y ver la imagen,todo nomal . por ejemplo

    tengo en un datagrivew  datos de persona con sus imagenes y cuando esos datos  los paso a caja de texto y a un picturebox la imagen normal hast ahi pero cuando quiero editar solo los datos y mantener la misma imagen me guarda y no me sale ningun error pero cuando quiero ver si los datos se actualizaron me sale un error

    objeto.Fotogra=System.Drawing.

    Image.FromStream(ms);

    diciendo que este parametro no es valido.

    tambien el mismo error me sale cuando cambio la imagen por otra

    nose si me habras entendido ese es mi problema que tengo . bueno espero tu respuesta gracias

    miércoles, 14 de septiembre de 2011 19:24
  • buenas noches alguien sabe como se usa el sqldmo para conectar con una base de datos gracias

    domingo, 02 de octubre de 2011 3:14