Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

CSharp: AjpdSoft Acceso SQLite C# ADO.NET
AjpdSoft


Publicada aplicación AjpdSoft Acceso SQLite C# ADO.NET y código fuente gratuito en C#. Mostramos en este artículo cómo funciona la aplicación y un listado del código completo.



Videotutorial AjpdSoft Acceso SQLite

A continuación mostramos un videotutorial sobre AjpdSoft Acceso SQLite C# ADO.NET con su funcionamiento básico para administración y gestión de bases de datos SQLite:

Acceso a SQLite usando el lenguaje de programación C# y ADO.NET

En el siguiente enlace mostramos un tutorial que explica paso a paso cómo crear una solución en Microsoft Visual Studio .Net 2012 con Visual C# .Net que accede y trabaja con bases de datos SQLite (uando ADO.NET):

AjpdSoft Acceso SQLite C# ADO.NET en funcionamiento

La aplicación AjpdSoft Acceso SQLite C# ADO.NET permite conectarse de forma nativa (mediante ADO.NET) a un fichero de base de datos SQLite. La aplicación incluye las siguientes funcionalidades:

  • Crea ficheros de bases de datos SQLite.
  • Abre ficheros de bases de datos SQLite existentes.
  • Permite abrir y crear ficheros de bases de datos SQLite con contraseña.
  • Ejecuta consultas SQL definidas por el usuario contra el fichero SQLite, tanto consultas de selección (SELECT, GROUP, HAVING), como de modificación (INSERT, UPDATE, DELETE, DROP, ALTER).
  • Muestra el resultado de la ejecución de consultas SQL de selección en pantalla.
  • Permite exportar el resultado de consultas SQL de selección a fichero CSV.

Para crear un fichero de base de datos SQLite introduciremos la carpeta y nombre del fichero, introduciremos la contraseña (si queremos establecer seguridad al fichero SQLite), marcaremos "Crear base de datos si no existe". Pulsando en el botón "Abrir/Crear BD" la aplicación creará y abrirá la bd y mostrará un mensaje indicando "BD SQLite abierta correctamente. Número de tablas que contiene: 0" (obviamente aún no contendrá ninguna tabla pues acabamos de crearla):

AjpdSoft Acceso SQLite C# ADO.NET en funcionamiento

Ahora podremos trabajar con el fichero creado, por ejemplo, para crear una nueva tabla introduciremos en "SQL":

create table prueba (codigo int, nombre varchar(100))

Puesto que es una consulta SQL de modificación de datos desmarcaremos "Devuelve datos" y pulsaremos en "Ejecutar consulta SQL":

AjpdSoft Acceso SQLite C# ADO.NET en funcionamiento

Insertaremos varios registros en la tabla de prueba con el SQL:

insert into prueba values (1, "AjpdSoft")

AjpdSoft Acceso SQLite C# ADO.NET en funcionamiento

Y como test podremos mostrar los registros insertados, con el SQL:

select * from prueba

Marcando la opción "Devuelve datos" y pulsando en "Ejecutar consulta SQL". Si todo es correcto mostrará los registros insertados en la tabla "prueba" en el grid datos:

AjpdSoft Acceso SQLite C# ADO.NET en funcionamiento

Para exportar los datos mostrados a un fichero CSV pulsaremos en el botón "E", nos mostrará una ventana para indicar la carpeta y nombre del fichero donde exportaremos los datos, por ejemplo "datos_sqlite.csv":

AjpdSoft Acceso SQLite C# ADO.NET en funcionamiento

Una vez exportado podremos abrir el fichero CSV con cualquier aplicación compatible (Microsoft Excel, Libre Office Calc, etc.):

AjpdSoft Acceso SQLite C# ADO.NET en funcionamiento

Por supuesto, AjpdSoft Acceso SQLite C# ADO.NET permite abrir ficheros de base de datos SQLite existentes ya creados con otras aplicaciones o incluso BDs de Android.

Código fuente completo de AjpdSoft Acceso SQLite C# ADO.NET

A continuación listamos el código fuente completo de la aplicación AjpdSoft Acceso SQLite C# ADO.NET:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;

using System.Windows.Forms;
using System.Data.SQLite;


namespace AjpdSoftAccesoSQLiteCSharp
{    
    public partial class formAccesoSQLiteCSharp : Form
    {
        private SQLiteConnection conexionSQLite;

        private List obtenerTablasBDSQLite()
        {
            List listaTablasSQLite = new List();
            string consultaSQL = 
                "select name from sqlite_master where type = 'table'";
            SQLiteCommand comandoSQL = 
                new SQLiteCommand(consultaSQL, conexionSQLite);
            comandoSQL.CommandType = CommandType.Text;
            try
            {
                SQLiteDataReader sqlReader = comandoSQL.ExecuteReader();
                while (sqlReader.Read())
                {
                    listaTablasSQLite.Add(sqlReader.GetString(0));
                }
                comandoSQL.Dispose();
                sqlReader.Dispose();
                return listaTablasSQLite;
            }
            catch (Exception error)
            {
                MessageBox.Show("Error al obtener el nombre de las tablas. " +
                    "Error: " + error.Message,
                    "Error tablas BD SQLite",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return listaTablasSQLite;
            }
        }
        

        private long obtenerNumeroTablasBDSQLite ()
        {
            string consultaSQL = 
                "select count(*) from sqlite_master where type = 'table'";
            SQLiteCommand comandoSQL = 
                new SQLiteCommand(consultaSQL, conexionSQLite);
            comandoSQL.CommandType = CommandType.Text;
            try
            {
                long numeroTablas = (long)comandoSQL.ExecuteScalar();
                comandoSQL.Dispose();
                return numeroTablas;
            }
            catch (Exception error)
            {
                MessageBox.Show("Error al obtener el número de tablas. " +
                    "Error: " + error.Message,
                    "Error nº tablas BD SQLite",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return -1;
            }
        }

        public formAccesoSQLiteCSharp()
        {
            InitializeComponent();
        }

        private void btAbrirBDSQLite_Click(object sender, EventArgs e)
        {
            if (txtBDSQLite.Text != "")
            {
                if ((opCrearBD.Checked))
                {
                    if (!System.IO.File.Exists(txtBDSQLite.Text))
                    {
                        try
                        {
                            SQLiteConnection.CreateFile(txtBDSQLite.Text);
                        }
                        catch (Exception error)
                        {
                            MessageBox.Show("Error al crear la BD SQLite. " +
                                "Error: " + error.Message,
                                "Error al crear BD SQLite",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                }

                //Abrir bd
                if (System.IO.File.Exists(txtBDSQLite.Text))
                {
                    string stringConexionSQLite =
                        String.Format("Data Source={0}", txtBDSQLite.Text);
                    try
                    {
                        conexionSQLite = new SQLiteConnection(stringConexionSQLite);
                        if (txtContrasena.Text != "")
                        {
                            conexionSQLite.SetPassword(txtContrasena.Text);
                        }
                        conexionSQLite.Open();
                        long numeroTablas = obtenerNumeroTablasBDSQLite();
                        if (numeroTablas == -1)
                        {
                            MessageBox.Show("Ha habido algún error al " +
                                "intentar obtener el número de tablas de " +
                                "la BD SQLite.", "Error al obtener nº tablas",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            //obtener el nombre de las tablas
                            lsTablas.DataSource = obtenerTablasBDSQLite();

                            MessageBox.Show("BD SQLite abierta correctamente. " +
                                "Número de tablas que contiene: " +
                                Convert.ToString(numeroTablas),
                                "BD abierta",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error al abrir la BD SQLite. " +
                            "Error: " + error.Message,
                            "Error al abrir BD SQLite",
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
            else
            {
                MessageBox.Show("Es necesario especificar una carpeta y " +
                    "fichero SQLite a abrir/crear.",
                    "Fichero SQLite no indicado",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtBDSQLite.Focus();
            }
        }

        private void btEjecutarSQL_Click(object sender, EventArgs e)
        {
            if (opSQLDevuelveDatos.Checked)
            {
                DataTable dt = new DataTable();
                SQLiteDataAdapter DataAdapter;
                try
                {
                    string consultaSQL = txtSQL.Text;
                    SQLiteCommand comandoSQL = 
                        new SQLiteCommand(consultaSQL, conexionSQLite);
                    comandoSQL.CommandType = CommandType.Text;
                    DataAdapter = new SQLiteDataAdapter(comandoSQL);
                    DataAdapter.Fill(dt);
                    dbTabla.DataSource = dt;
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error al ejecutar SQL: " +
                        error.Message, "Error SQL",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                try
                {
                    string consultaSQL = txtSQL.Text;
                    SQLiteCommand comandoSQL = 
                        new SQLiteCommand(consultaSQL, conexionSQLite);
                    comandoSQL.CommandType = CommandType.Text;
                    int numRegistrosAfectados = 0;
                    numRegistrosAfectados = comandoSQL.ExecuteNonQuery();
                    MessageBox.Show("Consulta SQL de modificación ejecutada correctamente.  " +
                        "Número de registros afectados: " +
                        Convert.ToString(numRegistrosAfectados),
                        "Ejecutada SQL modificación",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error al ejecutar SQL: " +
                        error.Message, "Error SQL",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void btSelBDSQLite_Click(object sender, EventArgs e)
        {
            dlAbrir.CheckFileExists = false;
            dlAbrir.CheckPathExists = true;
            dlAbrir.Multiselect = false;
            dlAbrir.DefaultExt = "sqlite";
            dlAbrir.FileName = "";
            dlAbrir.Filter = "Archivos SQLite (*.sqlite)|*.sqlite|" +
                "Todos los archivos (*.*)|*.*";
            dlAbrir.Title = "Seleccionar fichero BD SQLite a abrir";
            if (dlAbrir.ShowDialog() == DialogResult.OK)
            {
                txtBDSQLite.Text = dlAbrir.FileName;
            }         
        }

        private void btSelectTabla_Click(object sender, EventArgs e)
        {
            txtSQL.Text = "select * from " + lsTablas.Text;
        }

        private void btCambiarContrasena_Click(object sender, EventArgs e)
        {
            try
            {
                conexionSQLite.ChangePassword(txtNuevaContrasena.Text);
                MessageBox.Show("Contraseña cambiada correctamente.",
                    "Contraseña cambiada",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
            }
            catch (Exception error)
            {
                MessageBox.Show("Error al cambiar la contraseña: " + 
                    error.Message,
                    "Error al cambiar la contraseña",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
        }

        private void btExportarCSV_Click(object sender, EventArgs e)
        {
            dlGuardar.Filter = "Fichero CSV (*.csv)|*.csv";
            dlGuardar.FileName = "Datos_sqlite";
            dlGuardar.Title = "Exportar a CSV";
            if (dlGuardar.ShowDialog() == DialogResult.OK)
            {
                StringBuilder csvMemoria = new StringBuilder();

                //para los títulos de las columnas, encabezado
                for (int i = 0; i < dbTabla.Columns.Count; i++)
                {
                    if (i == dbTabla.Columns.Count - 1)
                    {
                        csvMemoria.Append(String.Format(""{0}"",
                            dbTabla.Columns[i].HeaderText));
                    }
                    else
                    {
                        csvMemoria.Append(String.Format(""{0}";",
                            dbTabla.Columns[i].HeaderText));
                    }
                }
                csvMemoria.AppendLine();


                for (int m = 0; m < dbTabla.Rows.Count; m++)
                {
                    for (int n = 0; n < dbTabla.Columns.Count; n++)
                    {     
                        //si es la última columna no poner el ;
                        if (n == dbTabla.Columns.Count - 1)
                        {
                            csvMemoria.Append(String.Format(""{0}"",
                                 dbTabla.Rows[m].Cells[n].Value));
                        }
                        else
                        {
                            csvMemoria.Append(String.Format(""{0}";",
                                dbTabla.Rows[m].Cells[n].Value));
                        }
                    }
                    csvMemoria.AppendLine();
                }
                System.IO.StreamWriter sw =
                    new System.IO.StreamWriter(dlGuardar.FileName, false,
                       System.Text.Encoding.Default);
                sw.Write(csvMemoria.ToString());
                sw.Close(); 
            }
        }

        private void linkLabel1_LinkClicked(object sender, 
            LinkLabelLinkClickedEventArgs e)
        {
            //abrir navegador por defecto y acceder a la URL www.ajpdsoft.com
            System.Diagnostics.Process.Start("http://www.ajpdsoft.com");
        }
    }
}

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd fundador del Proyecto AjpdSoft.

Artículo en inglés.


Anuncios


Enviado el Sábado, 25 mayo a las 18:50:05 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A