almacena mal la imágen en la base de datos

17/11/2004 - 17:24 por Alejandro Giardino | Informe spam
Hola a todos, estoy almacenando imágenes en bases de datos SQL server desde
ASP.NET con el siguiente código

Dim conn As New System.Data.SqlClient.SqlConnection
Dim br As BinaryReader = New
BinaryReader(Imagen.PostedFile.InputStream)
Dim photo() As Byte = br.ReadBytes(Imagen.PostedFile.ContentLength)
br.Close()
conn.ConnectionString ConfigurationSettings.AppSettings.Get("DBConnStr")
Dim Comm As New System.Data.SqlClient.SqlCommand
conn.Open()
Comm.Connection = conn
Comm.CommandText = "StProductosAltaImagenLogo"
Comm.CommandType = CommandType.StoredProcedure
Comm.Parameters.Add("@ImgLogo", SqlDbType.Image, photo.Length).Value
= photo
Dim IdProducto As New SqlClient.SqlParameter("@IdProducto",
FIdProducto.Text)
Comm.Parameters.Add(IdProducto)
Comm.ExecuteNonQuery()
conn.Close()
Response.Redirect("editar_prod.aspx?IdProducto=" &
Request.QueryString("IdProducto"))

El código del store procedure StProductosAltaImagenLogo es:

CREATE Procedure StProductosAltaImagenLogo (@IdProducto numeric(9),
@ImgLogo image) as
update Productos set ImgLogo=@ImgLogo
where IdProducto=@IdProducto
GO
y luego las intento levantar con el siguente código:

Dim conn As New System.Data.SqlClient.SqlConnection
Dim Comm As New System.Data.SqlClient.SqlCommand
conn.ConnectionString ConfigurationSettings.AppSettings.Get("DBConnStr")
Comm.Connection = conn
Comm.CommandText = "StProductosImagenLogoPorId"
Comm.CommandType = CommandType.StoredProcedure
Comm.Parameters.Add("@IdProducto", SqlDbType.Int).Value Request.QueryString("IdProducto")
Dim bufferSize As Integer = 100 ' The size of the BLOB buffer.
Dim outbyte(bufferSize - 1) As Byte ' The BLOB byte() buffer to be
filled by GetBytes.
Dim retval As Long ' The bytes returned from
GetBytes.
Dim startIndex As Long = 0 ' The starting position in the
BLOB output.
Dim pub_id As String = "" ' The publisher id to use in
the file name.
conn.Open()
Dim myReader As SqlDataReader Comm.ExecuteReader(CommandBehavior.SequentialAccess)
Do While myReader.Read()
startIndex = 0
retval = myReader.GetBytes(1, startIndex, outbyte, 0,
bufferSize)
Do While retval = bufferSize
Response.BinaryWrite(outbyte)
startIndex += bufferSize
retval = myReader.GetBytes(1, startIndex, outbyte, 0,
bufferSize)
Loop
Loop
myReader.Close()
conn.Close()

El código del Store procedure StProductosImagenLogoPorId es:

CREATE Procedure StProductosImagenLogoPorId (@IdProducto numeric(9))
as
SELECT IdProducto, ImgLogo FROM Productos
where IdProducto=@IdProducto
GO


el problema es que las imágenes se "rompen" al final, o sea, en la parte
inferior de la imágen se ve basura como si hubiera almacenado información
incorrecta. Les mando dos links a los archivos apra que vean:
logo-picasso.gif es el original y el archivo editar_imagen_producto.gif es
como se ve después de que pasó por la base de datos.
http://www.alegiardino.com.ar/logo-picasso.gif
http://www.alegiardino.com.ar/edita...oducto.gif

Bueno, acabo de darme cuenta de que la consulta incluye mucho código y les
agradezco a todos los que estén leyendo este párrafo la paciencia de haber
llegado ahasta aquí.
 

Leer las respuestas

#1 Sashka
21/11/2004 - 03:38 | Informe spam
¡Importante!: Colabora con el grupo. Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
No sé porque te pasa eso pero prueba esto (sin BinaryReader)
http://aspalliance.com/articleViewer.aspx?aId8&pIdAlli hay links tambien para mostrarlas ...

Sashka
MS MVP Access
MCP ASP.Net

"Alejandro Giardino" escribió en el mensaje
news:
Hola a todos, estoy almacenando imágenes en bases de datos SQL server
desde
ASP.NET con el siguiente código

Dim conn As New System.Data.SqlClient.SqlConnection
Dim br As BinaryReader = New
BinaryReader(Imagen.PostedFile.InputStream)
Dim photo() As Byte = br.ReadBytes(Imagen.PostedFile.ContentLength)
br.Close()
conn.ConnectionString > ConfigurationSettings.AppSettings.Get("DBConnStr")
Dim Comm As New System.Data.SqlClient.SqlCommand
conn.Open()
Comm.Connection = conn
Comm.CommandText = "StProductosAltaImagenLogo"
Comm.CommandType = CommandType.StoredProcedure
Comm.Parameters.Add("@ImgLogo", SqlDbType.Image,
photo.Length).Value
= photo
Dim IdProducto As New SqlClient.SqlParameter("@IdProducto",
FIdProducto.Text)
Comm.Parameters.Add(IdProducto)
Comm.ExecuteNonQuery()
conn.Close()
Response.Redirect("editar_prod.aspx?IdProducto=" &
Request.QueryString("IdProducto"))

El código del store procedure StProductosAltaImagenLogo es:

CREATE Procedure StProductosAltaImagenLogo (@IdProducto numeric(9),
@ImgLogo image) as
update Productos set ImgLogo=@ImgLogo
where IdProducto=@IdProducto
GO
y luego las intento levantar con el siguente código:

Dim conn As New System.Data.SqlClient.SqlConnection
Dim Comm As New System.Data.SqlClient.SqlCommand
conn.ConnectionString > ConfigurationSettings.AppSettings.Get("DBConnStr")
Comm.Connection = conn
Comm.CommandText = "StProductosImagenLogoPorId"
Comm.CommandType = CommandType.StoredProcedure
Comm.Parameters.Add("@IdProducto", SqlDbType.Int).Value > Request.QueryString("IdProducto")
Dim bufferSize As Integer = 100 ' The size of the BLOB buffer.
Dim outbyte(bufferSize - 1) As Byte ' The BLOB byte() buffer to be
filled by GetBytes.
Dim retval As Long ' The bytes returned from
GetBytes.
Dim startIndex As Long = 0 ' The starting position in the
BLOB output.
Dim pub_id As String = "" ' The publisher id to use in
the file name.
conn.Open()
Dim myReader As SqlDataReader > Comm.ExecuteReader(CommandBehavior.SequentialAccess)
Do While myReader.Read()
startIndex = 0
retval = myReader.GetBytes(1, startIndex, outbyte, 0,
bufferSize)
Do While retval = bufferSize
Response.BinaryWrite(outbyte)
startIndex += bufferSize
retval = myReader.GetBytes(1, startIndex, outbyte, 0,
bufferSize)
Loop
Loop
myReader.Close()
conn.Close()

El código del Store procedure StProductosImagenLogoPorId es:

CREATE Procedure StProductosImagenLogoPorId (@IdProducto
numeric(9))
as
SELECT IdProducto, ImgLogo FROM Productos
where IdProducto=@IdProducto
GO


el problema es que las imágenes se "rompen" al final, o sea, en la parte
inferior de la imágen se ve basura como si hubiera almacenado información
incorrecta. Les mando dos links a los archivos apra que vean:
logo-picasso.gif es el original y el archivo editar_imagen_producto.gif es
como se ve después de que pasó por la base de datos.
http://www.alegiardino.com.ar/logo-picasso.gif
http://www.alegiardino.com.ar/edita...oducto.gif

Bueno, acabo de darme cuenta de que la consulta incluye mucho código y les
agradezco a todos los que estén leyendo este párrafo la paciencia de haber
llegado ahasta aquí.


Preguntas similares