Advertisement
Guest User

Untitled

a guest
Dec 14th, 2012
2,463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.65 KB | None | 0 0
  1. using System;
  2. using System.Data;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5.  
  6. using System.IO;
  7. using System.Data.SqlClient;
  8.  
  9. namespace testCSharp
  10. {
  11.     public partial class Form1 : Form
  12.     {
  13.         public Form1()
  14.         {
  15.             InitializeComponent();
  16.             lblRutaImagen.Text = "";
  17.         }
  18.  
  19.         private const string CONNSTR = @"Data Source=.\SQLEXPRESS;Initial Catalog=DB_test;Integrated Security=True;";
  20.  
  21.         /// <summary>
  22.         /// Guarda en la base de datos el contenido de un archivo gráfico
  23.         /// </summary>
  24.         /// <param name="id">Identificador único (clave de la tabla) de la imagen</param>
  25.         /// <param name="filefoto">ruta y nombre de la imagen</param>
  26.         private void InsertarFotoEnBDD(int id, string filefoto)
  27.         {
  28.             try
  29.             {
  30.                 MemoryStream ms = new MemoryStream();
  31.                 FileStream fs = new FileStream(filefoto, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
  32.  
  33.                 ms.SetLength(fs.Length);
  34.                 fs.Read(ms.GetBuffer(), 0, (int)fs.Length);
  35.  
  36.                 byte[] arrImg = ms.GetBuffer();
  37.                 ms.Flush();
  38.                 fs.Close();
  39.  
  40.                 using (SqlConnection conn = new SqlConnection(CONNSTR))
  41.                 using (SqlCommand cmd = conn.CreateCommand())
  42.                 {
  43.                     conn.Open();
  44.  
  45.                     cmd.CommandText = "insert into IMAGENES (" +
  46.                                     " [id]" +
  47.                                     ",[nombre]" +
  48.                                     ",[imagen]" +
  49.                                     ") VALUES (" +
  50.                                     " @id" +
  51.                                     ",@nombre" +
  52.                                     ",@imagen" +
  53.                                     ")";
  54.  
  55.                     cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id;
  56.                     cmd.Parameters.Add("@nombre", SqlDbType.NVarChar, 64).Value = Path.GetFileName(filefoto);
  57.                     cmd.Parameters.Add("@imagen", SqlDbType.VarBinary).Value = arrImg;
  58.  
  59.                     cmd.ExecuteNonQuery();
  60.                 }
  61.             }
  62.             catch (Exception ex)
  63.             {                
  64.                 throw new Exception(ex.Message);
  65.             }
  66.         }
  67.  
  68.         /// <summary>
  69.         /// Accede a la base de datos para recuperar una imagen
  70.         /// </summary>
  71.         /// <param name="id">Valor del ID en la tabla de las imágenes</param>
  72.         /// <param name="savetofolder">Ruta del disco donde se guardará la imagen recuperada. La imagen se guardará con el mimso con el que se guardó originalmente</param>
  73.         private void ObtenerFotoDeBDD(int id, string savetofolder)
  74.         {
  75.             try
  76.             {
  77.                 using (SqlConnection conn = new SqlConnection(CONNSTR))
  78.                 using (SqlCommand cmd = conn.CreateCommand())
  79.                 {
  80.                     conn.Open();
  81.  
  82.                     cmd.CommandText = "select [nombre], [imagen] from IMAGENES where [id]=@id";
  83.                     cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id;
  84.  
  85.                     SqlDataReader reader = null;
  86.  
  87.                     reader = cmd.ExecuteReader();
  88.                     reader.Read();
  89.  
  90.                     string nombreFicheroBDD = (string)reader[0];
  91.                     string nSave = savetofolder + nombreFicheroBDD;
  92.  
  93.                     byte[] arrImg = (byte[])reader[1];
  94.  
  95.                     MemoryStream ms = new MemoryStream(arrImg);
  96.                     FileStream fs = new FileStream(nSave, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
  97.  
  98.                     ms.WriteTo(fs);
  99.  
  100.                     fs.Flush();
  101.                     fs.Close();
  102.                     ms.Close();
  103.                 }
  104.             }
  105.             catch (Exception ex)
  106.             {
  107.                 throw new Exception(ex.Message);
  108.             }
  109.         }    
  110.  
  111.         /// <summary>
  112.         /// Devuelve un objeto de tipo Image
  113.         /// </summary>
  114.         /// <param name="id">Identificador de la imagen</param>
  115.         /// <returns></returns>
  116.         private Image ObtenerBitmapdeBDD (int id)
  117.         {
  118.             try
  119.             {
  120.                 using (SqlConnection conn = new SqlConnection(CONNSTR))
  121.                 using (SqlCommand cmd = conn.CreateCommand())
  122.                 {
  123.                     conn.Open();
  124.  
  125.                     cmd.CommandText = "select [imagen] from IMAGENES where [id]=@id";
  126.                     cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id;
  127.  
  128.                     byte[] arrImg = (byte[])cmd.ExecuteScalar();
  129.  
  130.                     MemoryStream ms = new MemoryStream(arrImg);
  131.                     Image img = Image.FromStream(ms);
  132.  
  133.                     ms.Close();
  134.                    
  135.                     return img;
  136.                 }
  137.             }
  138.             catch (Exception ex)
  139.             {
  140.                 throw new Exception(ex.Message);
  141.             }
  142.         }
  143.  
  144.         #region Botones
  145.        
  146.         // Botón para seleccionar una imagen
  147.         private void btnImgDialog_Click(object sender, EventArgs e)
  148.         {
  149.             OpenFileDialog fd = new OpenFileDialog();
  150.             fd.Filter ="*.bmp;*.gif;*.jpg;*.png|*.bmp;*.gif;*.jpg;*.png";
  151.             fd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
  152.             fd.Title = "seleccionar la imagen que se guardará en la base de datos";
  153.             fd.RestoreDirectory = true;
  154.  
  155.             if (fd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  156.             {
  157.                 lblRutaImagen.Text = fd.FileName;
  158.                 pictureBox1.Image = Image.FromFile(fd.FileName);
  159.                 pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
  160.                 btnSaveToBDD.Enabled = true;                
  161.             }
  162.             else
  163.             {
  164.                 lblRutaImagen.Text = "";
  165.                 pictureBox1.Image = null;
  166.                 btnSaveToBDD.Enabled = false;
  167.             }
  168.         }
  169.  
  170.         // Botón Guardar la imagen seleccionada en la base de datos
  171.         private void btnSaveToBDD_Click(object sender, EventArgs e)
  172.         {
  173.             string str = mskId.Text.Trim();
  174.             int Num;
  175.             bool isNum = int.TryParse(str, out Num);
  176.             if (!isNum)
  177.             {
  178.                 MessageBox.Show("Falta introducir un id","Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  179.                 mskId.Focus();
  180.             }
  181.             else
  182.             {
  183.                 if (pictureBox1.Image == null || lblRutaImagen.Text =="")
  184.                 {
  185.                     MessageBox.Show("Falta seleccionar la foto a guardar en la base de datos", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  186.                 }
  187.                 else
  188.                 {
  189.                     try
  190.                     {
  191.                         InsertarFotoEnBDD(Num, lblRutaImagen.Text);
  192.                         MessageBox.Show("Se guardó la foto en la base de datos","Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
  193.                     }
  194.                     catch (Exception ex)
  195.                     {
  196.                         MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  197.                     }
  198.                 }
  199.             }
  200.         }
  201.  
  202.         // Botón Recuperar imagen desde la base de datos y generar un nuevo fichero en C:\Temp con
  203.         // el contenido de dicha imagen
  204.         private void btnLoadFromBDDtoFile_Click(object sender, EventArgs e)
  205.         {
  206.             string str = mskId.Text.Trim();
  207.             int Num;
  208.             bool isNum = int.TryParse(str, out Num);
  209.             if (!isNum)
  210.             {
  211.                 MessageBox.Show("Falta introducir un id", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  212.                 mskId.Focus();
  213.             }
  214.             else
  215.             {
  216.                 try
  217.                 {
  218.                     lblRutaImagen.Text = "";
  219.                     mskId.Text = "";
  220.                     btnSaveToBDD.Enabled=false;
  221.                     pictureBox1.Image = null;
  222.  
  223.                     ObtenerFotoDeBDD(Num, @"C:\temp\");
  224.                     MessageBox.Show("foto guardada con éxito");
  225.                 }
  226.                 catch (Exception ex)
  227.                 {
  228.                     MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  229.                 }
  230.             }
  231.         }
  232.  
  233.         // Botón Recuperar imagen desde la base de datos y mostrar dicha imagen en un picturebox
  234.         private void btnLoadFromBDDtoImg_Click(object sender, EventArgs e)
  235.         {
  236.             string str = mskId.Text.Trim();
  237.             int Num;
  238.             bool isNum = int.TryParse(str, out Num);
  239.             if (!isNum)
  240.             {
  241.                 MessageBox.Show("Falta introducir un id", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  242.                 mskId.Focus();
  243.             }
  244.             else
  245.             {
  246.                 try
  247.                 {
  248.                     lblRutaImagen.Text = "";
  249.                     mskId.Text = "";
  250.                     btnSaveToBDD.Enabled=false;
  251.                    
  252.                     pictureBox1.Image = ObtenerBitmapdeBDD(Num);                    
  253.                     pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
  254.                 }
  255.                 catch (Exception ex)
  256.                 {
  257.                     MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  258.                 }
  259.             }
  260.         }
  261.  
  262.         #endregion
  263.     }
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement