APLICACIÓN CON IMÁGENES Teniendo como bdd NEPTUNO en la que se tiene la tabla clientes , se va a realizar un formulario para almacenar y leer imágenes en una tabla ., a través del siguiente formulario:
El código de cliente se genera. Primer paso vamos a elaborar los procedimientos almacenados en sql 2005 ---Creacion de la tabla-use neptuno Create table clientesImagen( cli_cod char(5) Primary key, cli_nom varchar(100), cli_imagen image )
Select * from categorias ---Procedimientos Almacenados --Create procedure usp_clientesImagen As Select * from clientesimagen Go Create procedure usp_busclientesimagen @cli_cod char(5) As Select * from clientesimagen Where cli_cod=@cli _cod Go Create procedure usp_generacodigoclientesImagen @cli_cod varchar(5) Output As Set @cli_cod=(select max(cli_cod) from clientesImagen) Set @cli_cod='C'+Right('0000'+ltrim(right(isnull(@cli_cod,'00000'),4)+1),4) Go Declare @codigo char(5) exec usp_generacodigoclientesImagen @codigo output print @codigo Create procedure usp_insertarclienteimagen @cli_cod char(5),@cli_nom varchar(100),@cli_imagen image As Insert Into clientesImagen values(@cli_cod,@cli_nom,@cli_imagen) Go ---Realizar procedimiento para actualizar el dato del cliente Create proc usp_ActualizarDatos @cli_cod char(5),@cli_nom varchar(100),@cli_imagen image As Update ClientesImagen Set cli_nom=@cli_nom, cli_imagen=@cli_imagen Where cli_cod=@cli_cod Go Paso 2: crear la librería de clases en visual net EMPLEANDO CAPAS: Librería de negocios: PROYECTO LIBRERIADENEGOCIO .VBPROJ ---Aplicacion -- Guardando imagenes en SQL Server 2005 --la clase ClsFunciones.vb Imports System.Data Imports System.Data.SqlClient
Public Class ClsFunciones Dim cn As New SqlConnection(cadenasql) Public Function MostrarClientes() As DataTable Dim da As New SqlDataAdapter("usp_clientesImagen", cn) Dim tbl As New DataTable da.Fill(tbl) Return tbl End Function Public Function BusquedadeClientes(ByVal cli_cod As String) _ As DataTable Dim cmd As New SqlCommand("usp_busclientesimagen", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@cli_cod", SqlDbType.Char, 5).Value = cli_cod cn.Open() Dim tbl As New DataTable tbl.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection)) Return tbl End Function Public Function CodigodeCliente() As String Dim cmd As New SqlCommand("usp_generacodigoclientesImagen", cn) cmd.CommandType = CommandType.StoredProcedure 'definiendo el parametro de salida cmd.Parameters.Add("@cli_cod", SqlDbType.Char, 5).Direction = _ ParameterDirection.Output cn.Open() cmd.ExecuteNonQuery() 'ejecutando el SP cn.Close() 'recuperando el codigo generado C0000 del parametro de salida Return cmd.Parameters("@cli_cod").Value End Function Public Function GrabarCliente(ByVal cli_cod As String, _ ByVal cli_nom As String, ByVal imagen As Byte()) As Integer Dim cmd As New SqlCommand("usp_insertarclienteimagen", cn) cmd.CommandType = CommandType.StoredProcedure 'definiendo los parametros de entrada cmd.Parameters.Add("@cli_cod", SqlDbType.Char, 5).Value = cli_cod cmd.Parameters.Add("@cli_nom", SqlDbType.VarChar, 100).Value = _ cli_nom cmd.Parameters.Add("@cli_imagen", SqlDbType.Image).Va lue = imagen cn.Open() 'si el cliente es agregando en la tabla,ExecuteNonQuery 'devolvera el valor numerico 1 como fila afectada Dim nresp As Integer = cmd.ExecuteNonQuery() cn.Close() Return nresp End Function
End Class EL MODULO DE CONEXIÓN: MODULE1.VB Module Module1 Public cadenasql As String = "Server=(local);" & _ "Integrated Security=SSPI;Database=Neptuno" End Module El formulario en la capa de presentación: Form1.vb Imports System.data Imports System.IO 'Para manipular archivos Public Class Form1 'Creando el objeto mediante la libreria de clase Dim obj As New LIBRERIANEGOCIO.ClsFunciones Dim bytes() As Byte 'arreglo de bytes para la imagen Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load lblcodigo.Text = obj.CodigodeCliente MostrarClientes() End Sub Sub MostrarClientes() Dim tbl As DataTable = obj.Mostr arClientes DataGridView1.DataSource = tbl lblNumReg.Text = tbl.Rows.Count 'redimensionando las celdas DataGridView1.AutoResizeRows( _ DataGridViewAutoSizeRowsMode.AllCells) End Sub Private Sub CmdBuscarImag en_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdBuscarImagen.Click Try 'OpenFileDialog=> abrir cuadro de archivos Dim fileimagen As New OpenFileDialog fileimagen.Filter = _ "Archivo imagen(*.bmp,*.jpg,*.gif)|*.jpg" fileimagen.ShowDialog() 'abrir cuadro de busqueda 'fileimagen.FileName=>recupera el nombre del archivo If String.IsNullOrEmpty(fileimagen.FileName) Then MessageBox.Show("Seleccione una imagen", "Imagen") Exit Sub End If Dim strfoto As String = fileimagen.FileName PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage 'Image.FromFile=>carga imagen desde archivo
PictureBox1.Image = Image.FromFile(strfoto) 'recuperando la informacion del archivo imagen Dim fileinfo As New FileInfo(strfoto) 'obteniendo la longitud del archivo Dim longfileimagen As Long = fileinfo.Length 'abriendo el archivo en memoria para su conversion Dim fs As FileStream = New FileStream(strfoto, _ FileMode.Open, FileAccess.Read) 'asignando el espacio del arreglo,mediante la 'longitud de la imagen ReDim bytes(longfileimagen) 'iniciando la lectura de bytes,en base a la longitud 'del archivo de imagen fs.Read(bytes, 0, longfilei magen) fs.Close() 'cerrar memoria Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub CmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdNuevo.Clic k lblcodigo.Text = obj.CodigodeCliente txtnombres.Clear() : txtnombres.Focus() PictureBox1.Image = Nothing 'quitando imagen End Sub Private Sub CmdGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdGrabar.Click If txtnombres.Text = "" Then MessageBox.Show("Ingrese el nombre del Cliente") Exit Sub End If If PictureBox1.Image Is Nothing Then MessageBox.Show("Seleccione una imagen", "Imagenes") Exit Sub End If Dim nres As Integer = obj.GrabarCliente(lblcodigo.Text, _ txtnombres.Text, bytes) If nres = 1 Then MessageBox.Show("El Cliente fue registrado", "Insercion") MostrarClientes() End If End Sub Private Sub CmdBusqueda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdBusqueda.Click Try Dim codigo As String = InputBox("Ingrese un codigo " & _
" de cliente", "Busqueda de Clientes", "C0001") If codigo = "" Then MessageBox.Show("No ha ingresado el codigo de busqueda") Exit Sub 'salir del procedimiento End If 'recuperando los datos en un tabla del cliente encontrado Dim tbl As DataTable = obj.BusquedadeClientes(codigo) 'mostrando los datos del cliente 'tbl.rows(fila)(columna) lblcodigo.Text = tbl.Rows(0)(0).ToString txtnombres.Text = tbl.Rows(0)(1).ToString 'recuperando la imagen en un tipo arreglo de Byte bytes = CType(tbl.Rows(0)(2), Byte()) 'creando un archivo vacio con la fecha actual Dim archivoimagen As String = CStr(DateTime.Now.ToFileTime) 'abriendo el archivo para su creacion en memoria 'con(filestream) Dim fs As New System.IO .FileStream(archivoimagen, _ IO.FileMode.CreateNew, IO.FileAccess.Write) 'escribiendo los bytes fs.Write(bytes, 0, bytes.Length) fs.Close() PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage PictureBox1.Image = Image.FromFile(archivoimagen) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub CmdCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Han dles CmdCerrar.Click End Sub End Class Al final debe de obtenerse el siguiente resultado:
Susy Díaz Bustamante
Fernando Lértora Liñán
Como tarea para que mida su capacidad y competencia realizarse el siguiente ejercicio: empleando la BDD Neptuno