Autor
|
Tema: Guardar Imagen en base de datos. (c#) (Leído 71,835 veces)
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Más facil, crea el sqlCommand, y el INSERT en vez de poner todo ahí, en los valores pones @elnombre, es decir, parámetros, de esta forma creas los parameters y se los pones. El código de ejemplo está en el link que te pasé en este mismo post..
Hazlo así, que no te falla.
|
|
|
En línea
|
|
|
|
Hartigan
Desconectado
Mensajes: 310
|
Más facil, crea el sqlCommand, y el INSERT en vez de poner todo ahí, en los valores pones @elnombre, es decir, parámetros, de esta forma creas los parameters y se los pones. El código de ejemplo está en el link que te pasé en este mismo post..
Hazlo así, que no te falla.
NO entiendo!!!. xDD Raul, no me funciona lo que me has dicho me sale esto: Sintaxis incorrecta cerca de '?'. '. ??. .. ........ \a\b ??.? . .. } . !1A Qa\a' no es un nombre válido, porque contiene un carácter NULL o un carácter Unicode no válido. El identificador que comienza por '[<?8TA?k??G?|w?K???ea?2H\aa?.? ???|G(?1?7^? R?a p?w$`W??O????.?r?I?<?9??F1?d?U????Kuu=?[?????88 ????[l? +D?s? ????wL?xQ????????' es demasiado largo. La longitud máxima es 128. El identificador que comienza por '=[??Q??nc??V?5 y ?P={Q????? '?????@.'M????(?? ?#?q????J??6i-?0????-??n???H???k?????UH??>g_???_3?U??B? W?? ?d?3??4 1??&? Ms3???w?' es demasiado largo. La longitud máxima es 128. El identificador que comienza por 'YN?'x .?b? ????o?W?y? ??h??????? ??? ??T??w #?Mq???V?H&) ?????}??H?Gr ? ;??? A? ??? K? ? sJ???j? ?\a? ???#??:b?`r7????? ?i? ??l' es demasiado largo. La longitud máxima es 128. El identificador que comienza por '?6'??O??x ??k? ?2?%???H???.?#? ?? ?'? ??? ? ??~ ?^2?E`'? ???????D{ ?\U&??F?RuK_???? ???? ?? ?yt;?;3??n 8<?_RXw ???:4Z???o?$0??' es demasiado largo. La longitud máxima es 128. El identificador que comienza por '?e?|? ? ?O????? Mp".-? ?? ??H? b3?????|4??r?[?1??\a? :??q??UE%?.NR?>??@???Gyv _2x??? ?S ?? ?)u/ ? ???u ???+=.?3???<? ??\aVc??==' es demasiado largo. La longitud máxima es 128. El identificador que comienza por '??5?? ? ???? _?@=?=?!?????~6 ???'?? ?r??z? * ? ??S??6 { ?^}??8t;?2<y1???? ?(? ???b?=???=o??X???rX???%?r z? LIm!??????_?Y }???!' es demasiado largo. La longitud máxima es 128. Falta la comilla de cierre después de la cadena de caracteres 'i???q^k?/Y?$???????<?????f?????9-+3 I$?{?e8?lpT??????);'. :
|
|
|
En línea
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Más facil, crea el sqlCommand, y el INSERT en vez de poner todo ahí, en los valores pones @elnombre, es decir, parámetros, de esta forma creas los parameters y se los pones. El código de ejemplo está en el link que te pasé en este mismo post..
Hazlo así, que no te falla.
Eso no resuelve el problema!! si con eso se resuelve, mira este codigo Inserting and Retrieving images from SQL Server Database using C#
|
|
« Última modificación: 16 Junio 2010, 01:37 am por raul338 »
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
hehe viste raul xD es que yo lo probé y le mandé el código a Hartigan, creo que está en la página 2 xD
|
|
|
En línea
|
|
|
|
Hartigan
Desconectado
Mensajes: 310
|
Vale voy a probar con ese código. Si con eso ya no funciona. entonces que le den. loool.
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Haha no te rindas xD
|
|
|
En línea
|
|
|
|
43H4FH44H45H4CH49H56H45H
Wiki
Desconectado
Mensajes: 502
|
@Hartigan Hice el ejemplo similar al tuyo a la rapida solo para ver el error, al quitar las comillas simples de img indica el error y referencia el modo de hacerlo (no prestes atencion al button1): using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.IO; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { System.IO.Stream derecho = new System.IO.MemoryStream(); this.pictureBox1.Image.Save(derecho, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] imgDerecha = new byte[derecho .Length]; derecho.Position = 0; derecho.Read(imgDerecha, 0, System.Convert.ToInt32(derecho.Length)); derecho.Close(); string cadena_conexion = @"Server= (local)\SQLEXPRESS; DataBase = agenda; Integrated Security = yes;"; SqlConnection conexion = null; conexion = new SqlConnection (cadena_conexion ); String sentenciaSQL = "insert into contactos (apodo) values('" + imgDerecha + "')"; SqlDataAdapter data_adapter = new SqlDataAdapter (sentenciaSQL, conexion ); conexion = new SqlConnection (cadena_conexion ); conexion.Open(); SqlCommand cmd = new SqlCommand (sentenciaSQL, conexion ); if ((1 != cmd.ExecuteNonQuery())) { MessageBox.Show("Se ha producido un error al acceder a la fuente de datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void button2_Click(object sender, EventArgs e) { System.IO.Stream derecho = new System.IO.MemoryStream(); this.pictureBox1.Image.Save(derecho, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] imgDerecha = new byte[derecho .Length]; derecho.Position = 0; derecho.Read(imgDerecha, 0, System.Convert.ToInt32(derecho.Length)); derecho.Close(); string cadena_conexion = @"Server= (local)\SQLEXPRESS; DataBase = agenda; Integrated Security = yes;"; SqlConnection conexion = null; conexion = new SqlConnection (cadena_conexion ); String sentenciaSQL = "insert into contactos (apodo, imagen) values('"+ textBox1.Text + "',@img)"; SqlDataAdapter data_adapter = new SqlDataAdapter (sentenciaSQL, conexion ); conexion = new SqlConnection (cadena_conexion ); conexion.Open(); SqlCommand cmd = new SqlCommand (sentenciaSQL, conexion ); cmd.Parameters.AddWithValue("@img", imgDerecha); if ((1 != cmd.ExecuteNonQuery())) { MessageBox.Show("Se ha producido un error al acceder a la fuente de datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void button3_Click(object sender, EventArgs e) { string cadena_conexion = @"Server= (local)\SQLEXPRESS; DataBase = agenda; Integrated Security = yes;"; byte[] img = new byte[0]; string[] datos = new string[33]; String sentenciaSQL = "SELECT * FROM contactos WHERE apodo = 'pru1'"; SqlConnection conexion = null; conexion = new SqlConnection (cadena_conexion ); SqlDataAdapter data_adapter = new SqlDataAdapter (sentenciaSQL, conexion ); DataTable data_table = new DataTable (); conexion.Open(); data_adapter.Fill(data_table); textBox1.Text = data_table.Rows[0][0].ToString(); img = (byte[]) data_table.Rows[0][1]; int ArraySize = new int(); ArraySize = img.GetUpperBound(0); System.IO.Stream derec = new System.IO.MemoryStream(); derec.Write(img, 0, img.Length); pictureBox2.Image = Image.FromStream(derec); } } }
Solo presta atencion al button 2 y 3 el 1 es para @raul338 Me parece que estas guardando img como si fuera un string entre ' ', debes suprimirlas, osea solo guardas: INSERT INTO contactos (nombre,imagen) VALUES ('Juan',img);
Esta mal porque no puedes transformar un array a texto asi de simpleINSERT INTO contactos (nombre,imagen) VALUES ('Juan',img);
Desde C# se convierte a INSERT INTO contactos (nombre,imagen) VALUES ('Juan',System.Array);
En realidad seria asi: INSERT INTO contactos (nombre,imagen) VALUES ('Juan','System.Byte[]');
Y no se que entiendes por texto, pero mira el code del primer boton almaceno en una columna varchar(50) (apodo) el resultado del uso de las comillas simples, si no es texto entonces que es????? Y te dejo una imagen, si no quieres comprobarlos por ti mismo
|
|
« Última modificación: 16 Junio 2010, 04:12 am por 43H4FH44H45H4CH49H56H45H »
|
En línea
|
-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
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
//.......... private void button1_Click(object sender, EventArgs e) { //......... String sentenciaSQL = "insert into contactos (apodo) values('" + imgDerecha + "')"; //......... }
Solo presta atencion al button 2 y 3 el 1 es para @raul338 En realidad seria asi: INSERT INTO contactos (nombre,imagen) VALUES ('Juan','System.Byte[]');
Y no se que entiendes por texto, pero mira el code del primer boton almaceno en una columna varchar(50) (apodo) el resultado del uso de las comillas simples, si no es texto entonces que es????? Y te dejo una imagen, si no quieres comprobarlos por ti mismo Es un reto? 1º System.Byte[], bueno tengo la documentacion del .net framework en mi cabeza era lo que recordaba, vos te pensas que abro el visual studio a probar?? no! lo saco de lo que se! 2º Cambiaste el codigo, si guarda el string, pero lo que el intentaba hacer era guardar la imagen como si fuera texto (para colmo sin comillas) cosa que no es lo que estas proponiendo (boton2). Estas proponiendo la misma solucion que pusimos yo y danger, usar command con parametrosAsi que cerra la .... (con cariño jajaja )
|
|
|
En línea
|
|
|
|
43H4FH44H45H4CH49H56H45H
Wiki
Desconectado
Mensajes: 502
|
Es un reto? Si 2º Cambiaste el codigo, si guarda el string, pero lo que el intentaba hacer era guardar la imagen como si fuera texto (para colmo sin comillas) cosa que no es lo que estas proponiendo (boton2). Estas proponiendo la misma solucion que pusimos yo y danger, usar command con parametros
Estas completamente mal, no podria guardar como si fuera texto sin el uso de comillas y me doy cuenta lo que tratas de decir, pero lo estas diciendo mal, supongo por una falta de conceptos basicos. En realidad el visual studio te da la solucion al quitar las comillas simples lo que ahorra mucho tiempo en lugar de estar haciendo teorias y buscando enlaces que a la final no sabes si solucionan el problema, y peor confundiendo un system.array con otro diferente que a la final causan mas confusión
|
|
|
En línea
|
-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
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
1º que nada System.Byte[] es un array!!! no me crucifiques simplemente por ejemplificar. 2º Me faltan Concepto basicos? Cuales?! Yo dije que no se como se usa el image de sql porque sinceramente nunca lo use y nunca lo usare. Asi que supuse que se guardaba como archivo binario puro, transformado en texto. Por eso use el GetString y sin las comillas. Luego tu saltaste a decir una gran ovbiedad: que no se puede guardar texto sin comillas cuando en realidad intento guardar datos binarios. Ademas... el primero que tiro esa idea de guardar sin las comillas fuiste vosLa solucion es definitiva. Usar command con parametros (que no recuerdo quien sugirio a principios del hilo y lo pasamos de largo) cosa que es lo que los 3 terminamos proponiendo igual
|
|
« Última modificación: 16 Junio 2010, 16:14 pm por raul338 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
>Guardar base de datos
Bases de Datos
|
mapers
|
7
|
10,164
|
12 Mayo 2011, 08:58 am
por mapers
|
|
|
Guardar imagen sin tener ruta de archivo en una base datos.
.NET (C#, VB.NET, ASP)
|
enterariel
|
2
|
3,957
|
10 Agosto 2012, 22:04 pm
por enterariel
|
|
|
guardar campos ocultos en base de datos
Desarrollo Web
|
jecavi20
|
2
|
2,857
|
6 Julio 2013, 00:05 am
por jecavi20
|
|
|
Guardar Datos de una encuesta en Base de Datos con SQL Server
Programación C/C++
|
arodrigu3zg
|
0
|
2,265
|
20 Abril 2018, 23:06 pm
por arodrigu3zg
|
|
|
Guardar respuesta múltiple en base de datos
PHP
|
welchu
|
2
|
2,829
|
14 Agosto 2018, 19:06 pm
por andystefano
|
|