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.

    como-crear-base-datos-en-sqlite-para-guardar-archivos-e-imagenes

    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#.

    proyecto-en-visual-studio

    En el siguiente imagen se muestra como agregar, la librería System.Data.SQLite.dll, SQLite.Interop.dll y System.Data.SQLite.Linq.dll.

    agregar-la-biblioteca

    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
    Sobre el autor
    Rodrigo Chambi Q.

    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

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

    7 Comentarios

    1. De Emerson

      Responder

    2. De Rodrigo

      Responder

    3. De Roberto

      Responder

    4. De Pati

      Responder

    5. De Luis

      Responder

    6. De Victor

      Responder