Está en la página 1de 7

TRABAJANDO CON IMGENES VB .NET CON SQL SERVER 1. Formulario para mantenimiento de clientes, asociando una imagen.

2. Requerimientos: 2.1. Base de Datos y Procedimientos almacenados en SQL Server y Creamos la BD


CREATE DATABASE IMAGENES GO use IMAGENES Create table clientesImagen( cli_cod char(5) Primary key, cli_nom varchar(100), cli_imagen image )

Procedimiento almacenado para listar clientes


Create procedure usp_clientesImagen As Select * from clientesimagen Go

Procedimiento almacenado para buscar clientes por cdigo


create procedure usp_busclientesimagen @cli_cod char(5) As Select * from clientesimagen Where cli_cod=@cli_cod

Ing. Hobby Saavedra Rosas

Visual Basic. Net y SQL Server

Procedimiento almacenado generar cdigo


alter 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)

Procedimiento almacenado insertar clientes


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

Procedimiento actualizar clientes


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

2.2. Lenguaje de programacin Visual Basic. Net 2.2.1. Estructura de Archivos en Visual Studio

Ing. Hobby Saavedra Rosas

Visual Basic. Net y SQL Server

2.3. Cdigo fuente Capa Datos 2.3.1. Clase ClienteDAO


Imports System.Data.SqlClient Public Class ClienteDAO 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 If cn.State = ConnectionState.Open Then cn.Close() End If 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 If cn.State = ConnectionState.Open Then cn.Close() End If cn.Open() cmd.ExecuteNonQuery() 'ejecutando el SP cn.Close() 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).Value = imagen If cn.State = ConnectionState.Open Then cn.Close() End If cn.Open() Dim nresp As Integer = cmd.ExecuteNonQuery() cn.Close() Return nresp End Function End Class

Ing. Hobby Saavedra Rosas

Visual Basic. Net y SQL Server

2.3.2. ModuloConexion
Module ModConexion Public cadenasql As String = "Server=.;Integrated Security=True;Database=IMAGENES" End Module

2.3.3. Formulario (Capa Presentacin) 2.3.3.1. Diseo del Formulario para Mantenimiento de Clientes

2.3.3.2.

Componentes del formulario TextBox (txtCodigo, txtApeNom) Label Button PictureBox DataGridView Panel

Ing. Hobby Saavedra Rosas

Visual Basic. Net y SQL Server

2.3.4. Cdigo fuente


Imports System.Data Imports System.IO 'Para manipular archivos Imports ClassLibrary1 ' Capa Datos Public Class FrmClientes 'Creando el objeto mediante la libreria de clase Dim obj As New ClassLibrary1.ClienteDAO 'ClienteDAO 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 ' txtCodigo.Text = obj.CodigodeCliente MostrarClientes() BuscarCliente("C0001") End Sub Sub MostrarClientes() Dim tbl As DataTable = obj.MostrarClientes dgvClientes.DataSource = tbl lblNumReg.Text = tbl.Rows.Count 'redimensionando las celdas dgvClientes.AutoResizeRows( _ DataGridViewAutoSizeRowsMode.AllCells) dgvClientes.DefaultCellStyle.BackColor = Color.LightGoldenrodYellow dgvClientes.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGreen End Sub Sub buscarImagen() Try 'OpenFileDialog=> abrir cuadro de archivos Dim fileimagen As New OpenFileDialog fileimagen.Filter = _ "Archivo imagen(*.bmp,*.jpg,*.gif,*png)|*.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 pbCliente.SizeMode = PictureBoxSizeMode.StretchImage 'Image.FromFile=>carga imagen desde archivo pbCliente.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, longfileimagen)

Ing. Hobby Saavedra Rosas

Visual Basic. Net y SQL Server

fs.Close() 'cerrar memoria Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Sub NuevoCliente() If txtApeNom.Text = "" Then MessageBox.Show("Ingrese el nombre del Cliente") Exit Sub End If If pbCliente.Image Is Nothing Then MessageBox.Show("Seleccione una imagen", "Imagenes") Exit Sub End If Dim nres As Integer = obj.GrabarCliente(txtCodigo.Text, _ txtApeNom.Text, bytes) If nres = 1 Then MessageBox.Show("El Cliente fue registrado", "Insercion") MostrarClientes() End If End Sub Sub BuscarCliente(ByVal codigo As String) Try '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) txtCodigo.Text = tbl.Rows(0)(0).ToString txtApeNom.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() pbCliente.SizeMode = PictureBoxSizeMode.StretchImage pbCliente.Image = Image.FromFile(archivoimagen) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub dgvClientes_CellClick1(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvClientes.CellClick Dim dgvFila As DataGridViewRow = Me.dgvClientes.CurrentRow() Me.txtCodigo.Text = dgvFila.Cells(0).Value Me.txtApeNom.Text = dgvFila.Cells(1).Value bytes = CType(dgvFila.Cells(2).Value, Byte()) Dim archivoimagen As String = CStr(DateTime.Now.ToFileTime) 'abriendo el archivo para su creacion en memoria

Ing. Hobby Saavedra Rosas

Visual Basic. Net y SQL Server

'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() pbCliente.SizeMode = PictureBoxSizeMode.StretchImage pbCliente.Image = Image.FromFile(archivoimagen) End Sub Private Sub CmdBuscarImagen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click buscarImagen() End Sub Private Sub CmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNuevo.Click txtCodigo.Text = obj.CodigodeCliente txtApeNom.Clear() : txtApeNom.Focus() pbCliente.Image = Nothing 'quitando imagen End Sub Private Sub CmdGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGrabar.Click NuevoCliente() End Sub Private Sub CmdBusqueda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBusqueda.Click 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 BuscarCliente(codigo) End Sub Private Sub CmdCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCerrar.Click End End Sub End Class

Ing. Hobby Saavedra Rosas

Visual Basic. Net y SQL Server

También podría gustarte