Guardar Imagen en base de datos. (c#)

Iniciado por Hartigan, 13 Junio 2010, 20:25 PM

0 Miembros y 1 Visitante están viendo este tema.

Hartigan

Cita de: D4N93R en 15 Junio 2010, 18:38 PM
Ya probé el código de escritura que usas, funciona bien, ahora, yo creo que el problema que tienes esta en la lectura, o carga de data . Específicamente akí:

Código (csharp) [Seleccionar]

foreach (DataRow myRow in data_table.Rows)
{
     img = (byte[])myRow["imagen"];
     this.textBox1.Text = img[0].ToString() + " " + img[1].ToString() + " " + img[2].ToString() + " " + img[3].ToString();
}


En donde estas recorriendo un datatable que supuestamente debería tener un solo registro.

Si por casualidad te vienen dos vas a mostrar la imagen que no es, o pueede que sea hasta data corrupta que tengas en un registro mientras hacías las pruebas. y por eso te da error.

Entonces, añadres un brake en el foreach, cosa que es mala práctica, o lo haces de ésta manera:

Código (csharp) [Seleccionar]

if(data_table.Rows.Count>0)
{
     DataRow myRow = data_table.Rows[0];
     img = (byte[])myRow["imagen"];
     this.textBox1.Text = img[0].ToString() + " " + img[1].ToString() + " " + img[2].ToString() + " " + img[3].ToString();
}


Entonces el código que yo tengo para guardar está bien??? jejej gracias por probarlo. Aun así cambiaré las cosas que me habeis comentado. Voy a probar a cambiar el código de lectura a ver si me funciona con lo que me has dicho.

Saludos , ahora os comento.

[D4N93R]

Ok, perfecto, esperamos a ver como te va.

Hartigan

Cita de: D4N93R en 15 Junio 2010, 18:52 PM
Ok, perfecto, esperamos a ver como te va.

Nada, no funciona. sigue sin leer bien la imágen...

[D4N93R]

Borra toda la data y creala de nuevo.

43H4FH44H45H4CH49H56H45H

Me parece que estas guardando img como si fuera un string entre ' ', debes suprimirlas, osea solo guardas:

Código (sql) [Seleccionar]
INSERT INTO contactos (nombre,imagen)
values
('Juan',img);

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

[D4N93R]

En efecto, ese es un problema, ya que si no mal recuerdo cuando ejecutas eso se envía a la base de datos algo asi:

0xFFD8FFE000104A46494600010101006000600000FFE1005A.. etc

Por lo que tiene que ser así y no texto..

Saludos

Hartigan

Cita de: 43H4FH44H45H4CH49H56H45H en 15 Junio 2010, 19:34 PM
Me parece que estas guardando img como si fuera un string entre ' ', debes suprimirlas, osea solo guardas:

Código (sql) [Seleccionar]
INSERT INTO contactos (nombre,imagen)
values
('Juan',img);


me da el siguiente error haciendolo como dices:


El nombre "img" no es válido en este contexto. Las expresiones válidas son constantes, expresiones de constantes y, en algunos contextos, variables. No se permiten nombres de columna.


y lo he hecho así:

SqlCommand cmd = new SqlCommand("INSERT INTO contactos(apodo,imagen) VALUES('litos',img)", conexion);

Creo me doy por vencido...

:-(

43H4FH44H45H4CH49H56H45H

osea usabas
Código (sql) [Seleccionar]
'" + img + "'
haslo asi:
Código (sql) [Seleccionar]
" + img + "

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

Hartigan

Cita de: 43H4FH44H45H4CH49H56H45H en 15 Junio 2010, 20:08 PM
osea usabas
Código (sql) [Seleccionar]
'" + img + "'
haslo asi:
Código (sql) [Seleccionar]
" + img + "

También he probado así, y como te he puesto en el post anterior. De las 2 formas y me sigue fallando. Como me estás diciendo ahora me pasaba lo mismo de siempre, que me dice que el valor no es válido. Y añadiendo solo la imágen y un string me da el error que te he puesto arriba...

y no será cosa del sql??? pruebo con mysql???

raul338

Cita de: 43H4FH44H45H4CH49H56H45H en 15 Junio 2010, 19:34 PM
Me parece que estas guardando img como si fuera un string entre ' ', debes suprimirlas, osea solo guardas:

Código (sql) [Seleccionar]
INSERT INTO contactos (nombre,imagen)
values
('Juan',img);


Esta mal porque no puedes transformar un array a texto asi de simple

Código (sql) [Seleccionar]
INSERT INTO contactos (nombre,imagen)
values
('Juan',img);

Desde C# se convierte a
Código (sql) [Seleccionar]
INSERT INTO contactos (nombre,imagen)
values
('Juan',System.Array);


ese es el problema, no se como se maneja el tipo de datos image en sql por codigo, pero suponiendo que tienes que poner todos los bytes.... seria algo asi

Código (csharp) [Seleccionar]

string sql = "INSERT INTO contactos (nombre,imagen) values ('Juan',";
sql += System.Text.Encoding.Ascii.GetString(img, 0, img.Length);
sql += ");";


Espero que esto ayude algo :P