Вы находитесь на странице: 1из 11

APLICACIÓN CON IMÁGENES CON C#

Vamos a crear una BDD propia con una tabla clientes tal como se muestra en el
script luego a través de un formulario se va a realizar la gestión correspondiente
de grabar y leer imágenes de la tabla :

El código de cliente se genera.

Primer paso vamos a elaborar los procedimientos almacenados en sql 2005

use master
create database Imagen
go
use Imagen
go
create table ImagCliente(
codigo char(5)primary key,
nombre varchar(50),
foto image
)
select * from ImagCliente
delete from ImagCliente
go
------------------------------------------
create proc img_MostrarClientes
as
select * from ImagCliente
go
------

create proc Imag_uspgenerarcodigo


@codigo char(5) output
as
Set @codigo=(select max(codigo) from ImagCliente )
Set
@codigo='C'+right('000'+ltrim(right(isnull(@codigo,'0000'),4)
+1),4)
go
declare @codigo char(5)
exec Imag_uspgenerarcodigo @codigo output
print @codigo
go
----------------------------- -----------
create proc Imag_uspgrabarcliente
@codigo char(5),@nombre varchar(50),@foto image
as
insert into ImagCliente values(@codigo,@nombre,@foto)
go
-------------------------------
create proc Img_Buscarclientes
@codigo char(5)
as
select * from ImagCl iente where codigo=@codigo

Paso 2: Codigo en un formulario en C#.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;//Libreria para controlar archivos de Entrada
/ Salida
namespace GuardandoImagenes
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection cn = new
SqlConnection("Server= (local);Integrated
Security=SSPI;Database=Imagen");
private long m_lImagenFileLength=0; //Logitud delarchivo de
//la imagen
byte[] m_barrImg;

void cargaimagen()
{
//OpenFileDialog -->Permite al usuario abrir un archivo
OpenFileDialog open1 = new OpenFileDialog();
//Asignando el tipo de archivo a leer
//OpenFileDialog1.Filter="txt files(*.txt)|*.txt|All
//files(*.*)|*.*";
open1.Filter = "Imagen
Files(*.BMP,*.JPG,*.GIP)|*.BMP,*.JPG,*.GIP|All
files(*.*)|*.*";
open1.FilterIndex = 2;
open1.RestoreDirectory = true;
open1.ShowDialog();//Abriendo la cja de dialogo
//para selecionar un archivo
//Preguntando si ha selecionado o no un archivo
if(string.IsNullOrEmpty(open1.FileName))
{
MessageBox.Show("Selecione un Imagen");
return;//Saliendo del procedimiento
}
string strfoto = open1.FileName;
//Especificando la posicion de la imagen
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
//muestra la imagen desde una archivo especificado
pictureBox1.Image = Image.FromFile(strfoto);
//Propotciona un metodo de instancia para la
//creacion,eliminacion , mover la imagen
FileInfo fiImage = new FileInfo(strfoto);
//obteniendo la logitud de la imagen
this.m_lImagenFileLength = fiImage.Length;
//FileStream ==> Expone un objeto Stream alrededor de u
//archivo
// se admiten operaciones de lectura y escritura sincronica
//y asincronica
FileStream fs = new FileStream(strfoto, FileMode.Ope n,
FileAccess.Read, FileShare.Read);

//FileStream(string,FileMode,FileAccess,FileShare)
//Inicializa una nueva instancia de la clase fileStream con
//el permiso de uso compartido, el permiso de
//lectura/escritura, el mod o de creacion y la
//ruta de aceso especifico

//-----------------------------------------------
------------------------
m_barrImg = new
byte[Convert.ToInt32(this.m_lImagenFileLength)];// -----
//-----------------------------------------------
------------------------
//Read=> Lee un bloque de bytes de la secuencia y
escribe los datos en un bufer dado
//-----------------------------------------------
---------------------------------
//int iBystesRead = fs.Read(m_barrImg, 0,
Convert.ToInt16(m_lImagenFileLength));// --
//-----------------------------------------------
--------------------------------
//---------
try
{
int iBystesRead = fs.Read(m_barrImg, 0,
Convert.ToInt16(m_lImagenFileLength));// --
if (iBystesRead > 23552)
{
iBystesRead = 0;
pictureBox1.Image = null;
MessageBox.Show("La imagen debe de ser
160 x 120 pixeles");
return;
}
}
catch (Exception ex)
{
string a = ex.Message;
pictureBox1.Image = null;
MessageBox.Show("Imagen muy grande");
return;
}

//-----------------------------------------------
---------------------------------
//FileStream.Read(array,offset,count)
//parametros
//array
//cuando devuelve el metdo ,contiene la matriz de
bytes
//(offset+count)) reemplazada por los bytes
leidos desde el origen actual
//offset
//Desplazamiento de byte s en el parametro array
deonde debe comenzar la lectura
//count
//Numero maximo de bytes que se pueden leer
//valor devuelto
//numero total de bytes leidos en el bufer .Puede
ser menor que el numero de bytes solicitado si
//ese numero decimal bytes no esta disponible
actualmente o cero si se ha alcanzado else final de la
secuencia
fs.Close();
//Close()--> cierra la secuendia actual y libera
tados recursos
//(cimi sockets e identificardores de archivo)
asociados a esta
}
private void Form1_Load(object sender, EventArgs e)
{
Limpia();
}
void mostrarclientes()
{
SqlDataAdapter da = new
SqlDataAdapter("img_MostrarClientes", cn);
DataTable tb1 = new DataTable();
da.Fill(tb1);
dataGridView1.DataSource = tb1;

dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.All
Cells);
}
void MostrarcodigoGenerado()
{
SqlCommand cmd = new
SqlCommand("Imag_uspgenerarcodigo",cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@codigo", SqlDbType.Char,
5).Direction = Para meterDirection.Output;
cn.Open();
cmd.ExecuteNonQuery();
txtcod.Text = cmd.Parameters[0].Value.ToString();
cn.Close();
}

private void btnBuscarImagen_Click(object sender,


EventArgs e)
{
cargaimagen();
}

private void btnGuardar_Click(object sender,


EventArgs e)
{
try
{
SqlCommand cmd = new
SqlCommand("Imag_uspgrabarcliente", cn);
cmd.CommandType =
CommandType.StoredProcedure;
cmd.Parameters.Add("@codigo",
System.Data.SqlDbType.Char, 5).Value = txtcod.Text;
cmd.Parameters.Add("@nombre",
System.Data.SqlDbType.Char, 50).Value = txtnom.Text;
cmd.Parameters.Add("@foto",
System.Data.SqlDbType.Image).Value = m_barrImg;
cn.Open();
int iresult = cmd.ExecuteNonQuery();
if (iresult == 1)
{
mostrarclientes();
MessageBox.Show("Cliente Registrado");
}

}
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
finally
{
cn.Close();
}
Limpia();
}

private void btnNuevo_Click(object sender, EventArgs


e)
{
Limpia();
}
void Limpia()
{
txtcod.Text = "";
txtnom.Text = "";
txtcod.Enabled = false;
pictureBox1.Image = null;
txtnom.Focus();
mostrarclientes();
MostrarcodigoGenerado();
}

private void btnSalir_Click(object sender, EventArgs


e)
{
if(MessageBox.Show("Desea
Salir","Imagenes",MessageBoxButtons.YesNo,MessageBoxIcon.Info
rmation)==DialogResult.Yes)
{
Application.Exit();
}
}

private void button6_Click(object sender, Even tArgs e)


{
try
{
if (string.IsNullOrEmpty(txtbuscar.Text))
{
MessageBox.Show("Ingrese un codigo a buscar");
return;
}
SqlCommand cmd = new SqlCommand("Img_Buscarclientes", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@codigo", SqlDbType.Char, 5).Value =
txtbuscar.Text.ToString();
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows == true)
{
dr.Read();
txtcod.Text = dr[0].ToString();// campo codigo
txtnom.Text = dr[1].ToString();// campo nombre
byte[] barrImg = (byte[])dr[2];// campo foto
string strfn =
Convert.ToString(DateTime.Now.ToFileTime());
//FileStream(IntPtr,File Mode,FileAccess)
//incializa una nueva instalcia de la clase FileStream con
//el permiso de lectura/Escritura,el modo de creacion y la
//ruta de acceso especificado IntPtr ==> un indicador de
//archivo para el archivo que el objeto FileStream actual va
//a escapsular
//FileMode ==>una constrante de FileAccess que obtinee las
propiedades CanRead y CamWrite
// del o bjeto
//FileAccess ==> constante del FileAccess
que determina como el objtero FileStream puede obtener acceso
// al archivo
//Obtiene las propiedades CanRead y
CanWrite del objeto Fi leStream. CanSeek es TRUE si path
//especifica un archivo de disco
FileStream fs = new FileStream(strfn,
FileMode.CreateNew,FileAccess.Write);
fs.Write(barrImg, 0, barrImg.Length);
//Flush()=> borar todos los buferes de
esta secuencia y hace que todos los datos almacenados
// en el bufer se escriban en el
dispositivo subyacente
fs.Flush();
fs.Close();
pictureBox1.SizeMode =
PictureBoxSizeMode.StretchImage;
pictureBox1.Image =
Image.FromFile(strfn);
}
else
{
MessageBox.Show("No exite el registro");
txtcod.Clear(); txtnom.Clear();
pictureBox1.Image = null;

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally {
cn.Close();
}
}

}
}

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

Вам также может понравиться