Desarrollador de aplicaciones web y de escritorio, amante de la tecnología y autodidacta, me gusta conocer otras tecnologías, escribir artículos para compartir en la web y para estar al tanto en los nuevos paradigmas, respeto las políticas de software privativo y libre, ya que estas políticas son las normas que permite el desarrollo tecnológico social de la humanidad. filvovmax@gmail.com -- info@gitmedio.com
Como guardar Archivos e Imágenes en una Base datos sqlite c#
En este articulo se explica, como guardar archivos e imágenes en una Base datos sqlite, con el lenguaje de programación C#. En SQLite al usar el tipo dato Binary y Blob permite almacenar cadenas de bits con una longitud hasta 231-1 or 2147483647, con lo cual implementaremos un ejemplo sencillo.
En el ejemplo se utiliza Visual Estudio 2015 para la codificación, y también usted debe descargarse la biblioteca según a la arquitectura de tu PC.
En el primer paso crearemos una tabla en la base de datos, campos y sus tipos datos, a continuación se muestra en la siguiente imagen.
CREATE TABLE "Archivo" ( "ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "NombArch" VARCHAR(250), "Extesion" VARCHAR(250), "Archivo" BINARY, "TipoArch" VARCHAR(250) );
A continuación se crea el proyecto en el visual estudio en el lenguaje de programación C#.
En el siguiente imagen se muestra como agregar, la librería System.Data.SQLite.dll, SQLite.Interop.dll y System.Data.SQLite.Linq.dll.
En el siguiente ejemplo de código se realiza la acción de registrar en el evento click, cuyos archivos PDF y comprimido ZIP, de la cual se captura el detalle del archivo, y sea convertido en una cadenas de bits para guardar en la base de datos.
/// <summary> /// Método abrir archivo y captura // de información y conversión a byte /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void agregarArchivoToolStripMenuItem_(object sender, EventArgs e){ OpenFileDialog Archivo = new OpenFileDialog(); Archivo.Filter = "(Archivos pdf y zip)|*.pdf;*.zip"; Archivo.Title = "Agregar archivo"; if (Archivo.ShowDialog() == DialogResult.OK) { Byte[] BinarioArchiv = new Byte[0]; FileInfo ArchivoDetalle= new FileInfo(Archivo.FileName); BinarioArchiv = File.ReadAllBytes(ArchivoDetalle.FullName); BajasaltasSQLITE AgregarDatos = new BajasaltasSQLITE(BinarioArchiv, ArchivoDetalle.Name, ArchivoDetalle.Extension,TipoArchivo(ArchivoDetalle.Extension)); AgregarDatos.RutaBaseDatos = RutaDB;//Ruta del archivo de la base de datos. AgregarDatos.AgregarDatos(); AgregarDatos.CargarTablas(dataGridView1); } }
Al observar en el ejemplo se instancia la clase llamado BajasaltasSQLITE, el cual encapsula, Propiedades, campos y métodos para agregar datos, escribir archivo y buscar, cuya clase se muestra en el siguiente ejemplo.
using System; using System.Data.SQLite; using System.Windows.Forms; using System.Data; using System.IO; namespace Imagenes_archivo_sqlite{ class BajasaltasSQLITE{ /// <summary> /// Constructor por defecto /// </summary> public BajasaltasSQLITE(){ } /// <summary> /// Contructor con /// argumentos /// </summary> /// <param name="RutaArchivo"></param> /// <param name="NombreArch"></param> /// <param name="Extension"></param> /// <param name="TipoArch"></param> public BajasaltasSQLITE(byte[] Archivo, String NombreArch, String Extension, String TipoArch){ Archivo_ = Archivo; NombreArchivo_ = NombreArch; Extension_ = Extension; TipoArchivo_ = TipoArch; } private Byte[] Archivo_; private String RutaDB_; private String NombreArchivo_; private String Extension_; private String TipoArchivo_; /// <summary> /// Establece y devuelve /// la ruta de la base /// de datos /// </summary> public String RutaBaseDatos { get { return RutaDB_; } set { RutaDB_ = value; } } //Sector de propiedades /// <summary> /// Establece y devuelve /// la nombre del archivo /// </summary> public String NombreArchivo { get { return NombreArchivo_; } set { NombreArchivo_ = value; } } /// <summary> /// Establece y devuelve /// la extesion del archivo /// </summary> public String Extesion { get { return Extension_; } set { Extension_ = value; } } /// <summary> /// Establece y devuelve /// El tipo de archivo /// </summary> public String TipoArchivo{ get { return TipoArchivo_; } set { TipoArchivo_ = value; } } /// <summary> /// Agrega datos /// a la base de datos. /// </summary> public void AgregarDatos() { //Estableciendo la cenexion SQLiteConnection Conexion = new SQLiteConnection("Data Source="+RutaDB_+ ";Versión=3"); Conexion.Open(); SQLiteCommand Comando = new SQLiteCommand("INSERT INTO Archivo(NombArch,Extesion,TipoArch,Archivo) VALUES(@Nombres,@Extesions,@Tipos,@Archivos)",Conexion); Comando.Parameters.AddWithValue("@Nombres",NombreArchivo_); Comando.Parameters.AddWithValue("@Extesions", Extension_); Comando.Parameters.AddWithValue("@Tipos", TipoArchivo_); Comando.Parameters.AddWithValue("@Archivos", Archivo_); Comando.ExecuteNonQuery(); Conexion.Close(); } /// <summary> /// Metodo que /// carga al objeto /// DataGridView /// </summary> /// <param name="Lista"></param> public void CargarTablas(DataGridView Lista) { try{ DataSet Tabla = new DataSet(); //DataTable Tabla = new DataTable(); //BusquedaArch Tabla = new BusquedaArch(); SQLiteConnection ConexionSqlite = new SQLiteConnection(@"Data Source=" + RutaDB_ + ";Versión=3"); ConexionSqlite.Open(); SQLiteDataAdapter Insertar = new SQLiteDataAdapter("SELECT Archivo.ID,Archivo.NombArch,Archivo.Extesion,Archivo.TipoArch FROM Archivo", ConexionSqlite); Insertar.Fill(Tabla, "TablBusqueda"); Lista.DataSource = Tabla; ConexionSqlite.Close(); Lista.DataMember = "TablBusqueda"; if (Lista.ColumnCount > 0){ Lista.Columns[0].Visible = false; Lista.Columns[1].HeaderText = "Nombre"; Lista.Columns[1].Width = 300; Lista.Columns[2].HeaderText = "Extesion"; Lista.Columns[2].Width = 50; Lista.Columns[3].HeaderText = "Tipo"; Lista.Columns[3].Width = 300; Lista.AllowUserToAddRows = false; } } catch (Exception e){ //MessageBox.Show(e.Source); } } /// <summary> /// Recupera cadena de bytes desde la base de datos /// para escribir el archivo en el lugar /// donde se genera el ejecutable /// </summary> /// <param name="Id"></param> /// <param name="Nombre"></param> public void RecuparByt(string Id,string Nombre){ try{ Byte[] Archivo = new byte[0]; DataTable Tabla = new DataTable(); SQLiteConnection ConexionSqlite = new SQLiteConnection("Data Source="+RutaDB_+";Version=3"); ConexionSqlite.Open(); SQLiteDataAdapter comando = new SQLiteDataAdapter("SELECT Archivo FROM Archivo WHERE ID='"+ Id + "'", ConexionSqlite); comando.Fill(Tabla); DataRow Row; Row = Tabla.Rows[0]; Archivo = ((byte[])Row[0]); File.WriteAllBytes(Application.StartupPath + @"\"+Nombre,Archivo ); ConexionSqlite.Close(); } catch (Exception e) { MessageBox.Show(e.Message); } } /// <summary> /// Simple buscador /// de nombre de archivos /// </summary> /// <param name="Datos"></param> /// <param name="textbuscar"></param> public void Buscar(DataGridView Datos, String textbuscar) { try{ DataSet Tabla = new DataSet(); SQLiteConnection ConexionSqlite = new SQLiteConnection(@"Data Source=" + RutaDB_ + ";Versión=3"); ConexionSqlite.Open(); SQLiteDataAdapter Insertar = new SQLiteDataAdapter("SELECT Archivo.ID,Archivo.NombArch,Archivo.Extesion,Archivo.TipoArch FROM Archivo WHERE Archivo.NombArch LIKE '%"+ textbuscar + "%'", ConexionSqlite); Insertar.Fill(Tabla, "TablBusqueda"); Datos.DataSource = Tabla; ConexionSqlite.Close(); Datos.DataMember = "TablBusqueda"; if (Datos.ColumnCount > 0){ Datos.Columns[0].Visible = false; Datos.Columns[1].HeaderText = "Nombre"; Datos.Columns[1].Width = 300; Datos.Columns[2].HeaderText = "Extesion"; Datos.Columns[2].Width = 50; Datos.Columns[3].HeaderText = "Tipo"; Datos.Columns[3].Width = 300; Datos.AllowUserToAddRows = false; } } catch (Exception error) { } } } }
Como ya habrá visto, es un ejemplo sencillo como guardar archivos e imágenes en una base datos sqlite en c#, en el siguiente link dejo el ejemplo completo para que puedan probar.
Ejemplo:
Descargar Ejemplo 1MB
En java…Con NetBeans por ejemplo…?
puedes ver este tuto Emerson, http://usandojava.blogspot.com/2012/03/sqlite-java-y-un-ejemplo-practico.html, si estas usando Java.
Donde defines la ruta de la base
private String RutaDB = Application.StartupPath + @»\basededatos.db»;
Como sería para una base MySQL?
Saludos!
Roberto para una conexión con Mysql tienes descargar la librería https://dev.mysql.com/downloads/connector/net/8.0.html.
para una conexion sqlserver como seria???
Que interesante. Gracias!
Al cambiar la extencion pdf por doc, abre archivos en word pero no deja modificar.