Professional Documents
Culture Documents
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 :
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
------
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();
}
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
finally
{
cn.Close();
}
Limpia();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally {
cn.Close();
}
}
}
}