aplicaciÓn con imÁgenes
DESCRIPTION
Una aplicacion para grabar y leer imagenes en una tabla ,empleando visual Basic NetTRANSCRIPT
APLICACIÓN CON IMÁGENES
Teniendo como bdd NEPTUNO en la que se tiene la tabla clientes , se va arealizar un formulario para almacenar y leer imágenes en una tabla ., a travésdel 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 neptunoCreate table clientesImagen(cli_cod char(5) Primary key,cli_nom varchar(100),cli_imagen image)
Select * from categorias---Procedimientos Almacenados ---Create procedure usp_clientesImagenAsSelect * from clientesimagenGoCreate procedure usp_busclientesimagen@cli_cod char(5)AsSelect * from clientesimagen Where cli_cod=@cli _codGoCreate procedure usp_generacodigoclientesImagen@cli_cod varchar(5) OutputAsSet @cli_cod=(select max(cli_cod) from clientesImagen)Set @cli_cod='C'+Right('0000'+ltrim(right(isnull(@cli_cod,'00000'),4)+1),4)GoDeclare @codigo char(5)exec usp_generacodigoclientesImagen @codigo outputprint @codigo
Create procedure usp_insertarclienteimagen@cli_cod char(5),@cli_nom varchar(100),@cli_imagen imageAsInsert Into clientesImagen values(@cli_cod,@cli_nom,@cli_imagen)Go
---Realizar procedimiento para actualizar el dato del clienteCreate proc usp_ActualizarDatos@cli_cod char(5),@cli_nom varchar(100),@cli_imagen imageAsUpdate ClientesImagen Set cli_nom=@cli_nom,
cli_imagen=@cli_imagen Where cli_cod=@cli_codGo
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.DataImports System.Data.SqlClient
Public Class ClsFuncionesDim cn As New SqlConnection(cadenasql)Public Function MostrarClientes() As DataTable
Dim da As New SqlDataAdapter("usp_clientesImagen", cn)Dim tbl As New DataTableda.Fill(tbl)Return tbl
End FunctionPublic Function BusquedadeClientes(ByVal cli_cod As String) _
As DataTableDim cmd As New SqlCommand("usp_busclientesimagen", cn)cmd.CommandType = CommandType.StoredProcedurecmd.Parameters.Add("@cli_cod", SqlDbType.Char, 5).Value = cli_codcn.Open()Dim tbl As New DataTabletbl.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))Return tbl
End FunctionPublic Function CodigodeCliente() As String
Dim cmd As New SqlCommand("usp_generacodigoclientesImagen", cn)cmd.CommandType = CommandType.StoredProcedure'definiendo el parametro de salidacmd.Parameters.Add("@cli_cod", SqlDbType.Char, 5).Direction = _
ParameterDirection.Outputcn.Open()cmd.ExecuteNonQuery() 'ejecutando el SPcn.Close()'recuperando el codigo generado C0000 del parametro de salidaReturn cmd.Parameters("@cli_cod").Value
End FunctionPublic Function GrabarCliente(ByVal cli_cod As String, _
ByVal cli_nom As String, ByVal imagen As Byte()) As IntegerDim cmd As New SqlCommand("usp_insertarclienteimagen", cn)cmd.CommandType = CommandType.StoredProcedure'definiendo los parametros de entradacmd.Parameters.Add("@cli_cod", SqlDbType.Char, 5).Value = cli_codcmd.Parameters.Add("@cli_nom", SqlDbType.VarChar, 100).Value = _
cli_nomcmd.Parameters.Add("@cli_imagen", SqlDbType.Image).Va lue = imagencn.Open()'si el cliente es agregando en la tabla,ExecuteNonQuery'devolvera el valor numerico 1 como fila afectadaDim nresp As Integer = cmd.ExecuteNonQuery()cn.Close()Return nresp
End Function
End Class
EL MODULO DE CONEXIÓN: MODULE1.VB
Module Module1Public cadenasql As String = "Server=(local);" & _"Integrated Security=SSPI;Database=Neptuno"
End Module
El formulario en la capa de presentación: Form1.vb
Imports System.dataImports System.IO 'Para manipular archivosPublic Class Form1
'Creando el objeto mediante la libreria de claseDim obj As New LIBRERIANEGOCIO.ClsFuncionesDim bytes() As Byte 'arreglo de bytes para la imagenPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Loadlblcodigo.Text = obj.CodigodeClienteMostrarClientes()
End SubSub MostrarClientes()
Dim tbl As DataTable = obj.Mostr arClientesDataGridView1.DataSource = tbllblNumReg.Text = tbl.Rows.Count'redimensionando las celdasDataGridView1.AutoResizeRows( _
DataGridViewAutoSizeRowsMode.AllCells)End SubPrivate Sub CmdBuscarImagen_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles CmdBuscarImagen.ClickTry
'OpenFileDialog=> abrir cuadro de archivosDim fileimagen As New OpenFileDialogfileimagen.Filter = _
"Archivo imagen(*.bmp,*.jpg,*.gif)|*.jpg"fileimagen.ShowDialog() 'abrir cuadro de busqueda'fileimagen.FileName=>recupera el nombre del archivoIf String.IsNullOrEmpty(fileimagen.FileName) Then
MessageBox.Show("Seleccione una imagen", "Imagen")Exit Sub
End IfDim strfoto As String = fileimagen.FileNamePictureBox1.SizeMode = PictureBoxSizeMode.StretchImage'Image.FromFile=>carga imagen desde archivo
PictureBox1.Image = Image.FromFile(strfoto)'recuperando la informacion del archivo imagenDim fileinfo As New FileInfo(strfoto)'obteniendo la longitud del archivoDim longfileimagen As Long = fileinfo.Length'abriendo el archivo en memoria para su conversionDim fs As FileStream = New FileStream(strfoto, _FileMode.Open, FileAccess.Read)
'asignando el espacio del arreglo,mediante la'longitud de la imagenReDim bytes(longfileimagen)'iniciando la lectura de bytes,en base a la longitud'del archivo de imagenfs.Read(bytes, 0, longfileimagen)fs.Close() 'cerrar memoria
Catch ex As ExceptionMessageBox.Show(ex.Message)
End TryEnd SubPrivate Sub CmdNuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CmdNuevo.Clic klblcodigo.Text = obj.CodigodeClientetxtnombres.Clear() : txtnombres.Focus()PictureBox1.Image = Nothing 'quitando imagen
End SubPrivate Sub CmdGrabar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CmdGrabar.ClickIf txtnombres.Text = "" Then
MessageBox.Show("Ingrese el nombre del Cliente")Exit Sub
End IfIf PictureBox1.Image Is Nothing Then
MessageBox.Show("Seleccione una imagen", "Imagenes")Exit Sub
End IfDim nres As Integer = obj.GrabarCliente(lblcodigo.Text, _txtnombres.Text, bytes)
If nres = 1 ThenMessageBox.Show("El Cliente fue registrado", "Insercion")MostrarClientes()
End IfEnd SubPrivate Sub CmdBusqueda_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CmdBusqueda.ClickTry
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 encontradoDim tbl As DataTable = obj.BusquedadeClientes(codigo)'mostrando los datos del cliente'tbl.rows(fila)(columna)lblcodigo.Text = tbl.Rows(0)(0).ToStringtxtnombres.Text = tbl.Rows(0)(1).ToString'recuperando la imagen en un tipo arreglo de Bytebytes = CType(tbl.Rows(0)(2), Byte())'creando un archivo vacio con la fecha actualDim 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 bytesfs.Write(bytes, 0, bytes.Length)fs.Close()PictureBox1.SizeMode = PictureBoxSizeMode.StretchImagePictureBox1.Image = Image.FromFile(archivoimagen)
Catch ex As ExceptionMessageBox.Show(ex.Message)
End TryEnd Sub
Private Sub CmdCerrar_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CmdCerrar.Click
End SubEnd Class
Al final debe de obtenerse el siguiente resultado:
Como tarea para que mida su capacidad y competencia realizarse el siguienteejercicio: empleando la BDD Neptuno
Susy Díaz Bustamante
Fernando Lértora Liñán