Advertisement
Guest User

Untitled

a guest
Dec 14th, 2012
3,363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 8.59 KB | None | 0 0
  1. Imports System.Data.SqlClient
  2. Imports System.IO
  3.  
  4. Public Class Form1
  5.     Const CONNSTR As String = "Data Source=.\SQLEXPRESS;Initial Catalog=DB_test;Integrated Security=True;"
  6.  
  7.     Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  8.         lblRutaImagen.Text = ""
  9.     End Sub
  10.  
  11.     ''' <summary>
  12.     ''' Guarda en la base de datos el contenido de un archivo gráfico
  13.     ''' </summary>
  14.     ''' <param name="id">Identificador único (clave de la tabla) de la imagen</param>
  15.     ''' <param name="filefoto">ruta y nombre de la imagen</param>
  16.     ''' <remarks></remarks>
  17.     Private Sub InsertarFotoEnBDD(id As Integer, filefoto As String)
  18.  
  19.         Try
  20.             Dim ms As MemoryStream = New MemoryStream()
  21.             Dim fs As FileStream = New FileStream(filefoto, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
  22.  
  23.             ms.SetLength(fs.Length)
  24.             fs.Read(ms.GetBuffer(), 0, fs.Length)
  25.  
  26.             Dim arrImg() As Byte = ms.GetBuffer()
  27.             ms.Flush()
  28.             fs.Close()
  29.  
  30.             Using conn As New SqlConnection(CONNSTR)
  31.                 Using cmd As SqlCommand = conn.CreateCommand()
  32.  
  33.                     conn.Open()
  34.  
  35.                     cmd.CommandText = "insert into IMAGENES (" +
  36.                                     " [id]" +
  37.                                     ",[nombre]" +
  38.                                     ",[imagen]" +
  39.                                     ") VALUES (" +
  40.                                     " @id" +
  41.                                     ",@nombre" +
  42.                                     ",@imagen" +
  43.                                     ")"
  44.  
  45.                     cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id
  46.                     cmd.Parameters.Add("@nombre", SqlDbType.NVarChar, 64).Value = Path.GetFileName(filefoto)
  47.                     cmd.Parameters.Add("@imagen", SqlDbType.VarBinary).Value = arrImg
  48.  
  49.                     cmd.ExecuteNonQuery()
  50.                 End Using
  51.             End Using
  52.             ms.Close()
  53.         Catch ex As Exception
  54.             Throw New Exception(ex.Message)
  55.         End Try
  56.     End Sub
  57.  
  58.     ''' <summary>
  59.     ''' Accede a la base de datos para recuperar una imagen
  60.     ''' </summary>
  61.     ''' <param name="id">Valor del ID en la tabla de las imágenes</param>
  62.     ''' <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>
  63.     ''' <remarks></remarks>
  64.     Private Sub ObtenerFotoDeBDD(id As Integer, savetofolder As String)
  65.         Try
  66.             Using conn As New SqlConnection(CONNSTR)
  67.                 Using cmd As SqlCommand = conn.CreateCommand
  68.                     conn.Open()
  69.  
  70.                     cmd.CommandText = "select [nombre], [imagen] from IMAGENES where [id]=@id"
  71.                     cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id
  72.  
  73.                     Dim reader As SqlDataReader = Nothing
  74.  
  75.                     reader = cmd.ExecuteReader
  76.                     reader.Read()
  77.  
  78.                     Dim nombreFicheroBDD As String = reader.Item(0)
  79.                     Dim nSave As String = savetofolder & nombreFicheroBDD
  80.  
  81.                     Dim arrImg() As Byte = reader.Item(1)
  82.  
  83.                     Dim ms As MemoryStream = New MemoryStream(arrImg)
  84.                     Dim fs As FileStream = New FileStream(nSave, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)
  85.  
  86.                     ms.WriteTo(fs)
  87.  
  88.                     fs.Flush()
  89.                     fs.Close()
  90.                     ms.Close()
  91.                 End Using
  92.             End Using
  93.         Catch ex As Exception
  94.             Throw New Exception(ex.Message)
  95.         End Try
  96.     End Sub
  97.  
  98.     ''' <summary>
  99.     ''' Devuelve un objeto de tipo Image
  100.     ''' </summary>
  101.     ''' <param name="id">Identificador de la imagen</param>
  102.     ''' <returns></returns>
  103.     ''' <remarks></remarks>
  104.     Private Function ObtenerBitmapdeBDD(id As Integer) As Image
  105.         Try
  106.             Using conn As New SqlConnection(CONNSTR)
  107.                 Using cmd As SqlCommand = conn.CreateCommand
  108.                     conn.Open()
  109.  
  110.                     cmd.CommandText = "select [imagen] from IMAGENES where [id]=@id"
  111.                     cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = id
  112.  
  113.                     Dim arrImg() As Byte = cmd.ExecuteScalar
  114.  
  115.                     Dim ms As New MemoryStream(arrImg)
  116.  
  117.                     Dim img As Image = Image.FromStream(ms)
  118.                     ms.Close()
  119.                     Return img
  120.  
  121.                 End Using
  122.             End Using
  123.         Catch ex As Exception
  124.             Throw New Exception(ex.Message)
  125.         End Try
  126.     End Function
  127.  
  128.  
  129. #Region "Botones"
  130.  
  131.     ' Botón para seleccionar una imagen
  132.     Private Sub btnImgDialog_Click(sender As System.Object, e As System.EventArgs) Handles btnImgDialog.Click
  133.         Dim fd As New OpenFileDialog
  134.  
  135.         fd.Filter = "*.bmp;*.gif;*.jpg;*.png|*.bmp;*.gif;*.jpg;*.png"
  136.         fd.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
  137.         fd.Title = "seleccionar la imagen que se guardará en la base de datos"
  138.         fd.RestoreDirectory = True
  139.  
  140.         If fd.ShowDialog = Windows.Forms.DialogResult.OK Then
  141.             lblRutaImagen.Text = fd.FileName
  142.             pictureBox1.Image = Image.FromFile(fd.FileName)
  143.             pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
  144.             btnSaveToBDD.Enabled = True
  145.         Else
  146.             lblRutaImagen.Text = ""
  147.             pictureBox1.Image = Nothing
  148.             btnSaveToBDD.Enabled = False
  149.         End If
  150.     End Sub
  151.  
  152.     ' Botón Guardar la imagen seleccionada en la base de datos
  153.     Private Sub btnSaveToBDD_Click(sender As System.Object, e As System.EventArgs) Handles btnSaveToBDD.Click
  154.         If IsNumeric(mskId.Text.Trim) = False Then
  155.             MessageBox.Show("Falta introducir un id", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  156.             mskId.Focus()
  157.         Else
  158.             If IsNothing(pictureBox1.Image) OrElse lblRutaImagen.Text = "" Then
  159.                 MessageBox.Show("Falta seleccionar la foto a guardar en la base de datos", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  160.             Else
  161.                 Try
  162.                     InsertarFotoEnBDD(Int32.Parse(mskId.Text.Trim), lblRutaImagen.Text)
  163.                     MessageBox.Show("Se guardó la foto en la base de datos", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
  164.  
  165.                 Catch ex As Exception
  166.                     MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  167.                 End Try
  168.             End If
  169.         End If
  170.     End Sub
  171.  
  172.     ' Botón Recuperar imagen desde la base de datos y generar un nuevo fichero en C:\Temp con
  173.     ' el contenido de dicha imagen
  174.     Private Sub btnLoadFromBDDtoFile_Click(sender As System.Object, e As System.EventArgs) Handles btnLoadFromBDDtoFile.Click
  175.         If IsNumeric(mskId.Text.Trim) = False Then
  176.             MessageBox.Show("Falta introducir un id", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  177.             mskId.Focus()
  178.         Else
  179.             Try
  180.                 lblRutaImagen.Text = ""
  181.  
  182.                 btnSaveToBDD.Enabled = False
  183.                 pictureBox1.Image = Nothing
  184.  
  185.  
  186.                 ObtenerFotoDeBDD(Int32.Parse(mskId.Text.Trim), "C:\temp\")
  187.                 mskId.Text = ""
  188.                 MessageBox.Show("foto guardada con éxito")
  189.             Catch ex As Exception
  190.                 MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  191.             End Try
  192.         End If
  193.     End Sub
  194.  
  195.     ' Botón Recuperar imagen desde la base de datos y mostrar dicha imagen en un picturebox
  196.     Private Sub btnLoadFromBDDtoImg_Click(sender As System.Object, e As System.EventArgs) Handles btnLoadFromBDDtoImg.Click
  197.         If IsNumeric(mskId.Text.Trim) = False Then
  198.             MessageBox.Show("Falta introducir un id", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  199.             mskId.Focus()
  200.         Else
  201.             Try
  202.                 lblRutaImagen.Text = ""            
  203.                 btnSaveToBDD.Enabled = False
  204.  
  205.                 pictureBox1.Image = ObtenerBitmapdeBDD(Int32.Parse(mskId.Text.Trim))
  206.                 pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
  207.                 mskId.Text = ""
  208.             Catch ex As Exception
  209.                 MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  210.             End Try
  211.         End If
  212.     End Sub
  213.  
  214. #End Region
  215.  
  216. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement