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