martes, 30 de junio de 2009

Graba imagen en tabla de SQL Server

El còdigo graba una imagen en una tabla de sql server, para el ejemplo genere 3 campos en la table Catalogo, Clave INT, Nombre VARCHAR(50) e Imagen IMAGE, para realizar la conversiòn de la imagen utilizo la funciòn READBINARYFILE()


Dim Cnn As New SqlConnection("Server=nombre_server;uid=usuario;password=contraseña;database=base_datos")
Dim Ds As New DataSet
Dim Da As New SqlClient.SqlDataAdapter("select * from Catalogo", Cnn)
Da.Fill(Ds, "Catalogo")
Dim sql As String = "SELECT * FROM Catalogo"
Dim cb As New SqlCommandBuilder(Da)
Da.Fill(Ds, "Catalogo")
' Añadimos un nuevo registro.
Dim row As DataRow = Ds.Tables("Catalogo").NewRow()
With row
' Campo identificador de la tabla.
.Item("clave") = TextBox1.Text
.Item("nombre") = TextBox2.Text
' Campo que contiene el tipo de dato Image, Leemos el archivo
.Item("imagen") = ReadBinaryFile(Trim(TextBox3.Text))
End With
' Añadimos la fila a la colección Rows.
Ds.Tables("Catalogo").Rows.Add(row)
' Actualizamos la base de datos.
Da.Update(Ds, "Catalogo")
Cnn.Close()
Me.Close()



Private Function ReadBinaryFile(ByVal fileName As String) As Byte()
' Si no existe el archivo, abandono la función.
If Not System.IO.File.Exists(fileName) Then Return Nothing
Try
' Creamos un objeto Stream para poder leer el archivo especificado.
Dim fs As New FileStream(fileName, FileMode.Open, FileAccess.Read)
' Creamos un array de bytes, cuyo límite superior se corresponderá
' con la longitud en bytes de la secuencia.
Dim data() As Byte = New Byte(Convert.ToInt32(fs.Length)) {}
' Al leer la secuencia, se rellenará la matriz.
fs.Read(data, 0, Convert.ToInt32(fs.Length))
' Cerramos la secuencia.
fs.Close()
' Devolvemos el array de bytes.
Return data
Catch ex As Exception
' Cualquier excepción producida, hace que la
' función devuelva el valor Nothing.
Return Nothing
End Try
End Function

Comparte