jueves, 18 de febrero de 2016

Manipulación de una de una base da datos hecha en SQLite desde CSharp.


MANIPULACIÓN DE UNA BASE DE DATOS HECHA EN SQLITE DESDE CSHARP.

SQLite es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente pequeña ​ biblioteca escrita en C. SQLite es un proyecto de dominio público​ creado por D. Richard Hipp. Wikipedia

En los actuales momentos esta base de datos es muy utilizada en aplicaciones móviles y páginas web; por su fácil acceso a los datos esta DB es una herramienta muy útil a la hora de realizar un proyecto con características móvil o lo que está de moda, programas basado en la web.

Por tal razón, en esta ocasión les traigo un pequeño ejemplo de cómo hacer un CRUD utilizando Sqlite como base de datos, esta aplicación utilizar lista genérica emulando una programación en capas.

En primera instancia veremos el diseño del formulario a utilizar, como podrán observar este diseño es muy sencillo y utiliza los controles comunes de la barra de herramientas.

Diseño del formulario Formulario


En este ejemplo utilizaremos el Espacio de nombres: using System.Data.SQLite; para tener acceso a base de datos Sqlite mediante sus métodos como: SQLiteConnection y SQLiteCommand.

variables globales utilizadas para la conexión.

En esta parte, inicializaremos la variables que almacenarán las instrucciones SQL como son INSERT INTO, UPDATE, SELECT y DELETE , las cuales permiten la manipular los datos dentro de una TABLA. En este caso utilizaremos una tabla llamada PROFESOR, como se muestra a continuación.


private String connectionString;
private SQLiteConnection connection;
private String SQLInsert = "INSERT INTO profesor(id, apellidos, nombres, abreviatura,activo) VALUES(?, ?, ?, ?, ?)";
private String SQLUpdate = "UPDATE profesor SET apellidos = ?, nombres = ? ,abreviatura=?,activo=? where id = ?";
private String SQLSelect = "SELECT id, apellidos, nombres, abreviatura, activo FROM profesor order by apellidos,nombres";
private String SQLDelete = "DELETE FROM profesor WHERE id = ?";
private string SQLMax = "SELECT MAX(ID) FROM profesor";


Evento de constructor de inicio del formulario

En esta etapa, se realiza la conexión directa con la base de datos, y se cargan todos los datos haciendo referencia a la función search();. Mas adelante se mostrar el código.

public frmProfesor()
        {
            InitializeComponent();

            connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["db"].ConnectionString;
            connection = new SQLiteConnection(connectionString);
            search();
        }

Procedimiento que devuelve los datos de la tabla profesor

Mediante la instrucción SQL SELECT, listamos todos los datos de nuestra tabla de ejemplo, una vez realizado este proceso se los agrega a una lista genérica llamada cursorlista mediante su función Add().

private void search()
        {
            List<profesorEntity> cursolista = new List<profesorEntity>();
            // Abrimos la conexión
            if (connection.State != ConnectionState.Open)
                connection.Open();


            // Creamos un SQLiteCommand y le asignamos la cadena de consulta
            SQLiteCommand command = connection.CreateCommand();
            command.CommandText = SQLSelect;

            using (SQLiteDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    cursolista.Add(new profesorEntity { id = reader.GetInt32(0), apellidos = reader.GetString(1), nombres = reader.GetString(2), abreviatura = reader.GetString(3), activo = reader.GetBoolean(4) });
                }
            }

            this.profesorEntityBindingSource.DataSource = cursolista;
        }


Procedimiento de devuelve el último registro del campo id de la tabla profesor.

Cuando utilizamos una tabla y cuyo campo de identificación (id en este caso) no es autonumérico, es necesario saber cuál será el siguiente registro, es por eso que en este proyecto utilizo una función que devuelve el siguiente registro.

private Int32 Incremento()
        {
            if (connection.State != ConnectionState.Open)
                connection.Open();

            Int32 num = 0;

            SQLiteCommand command = connection.CreateCommand();
            command.CommandText = SQLMax;
            using (SQLiteDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    num = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);
                }
            }

            num++;

            return num;
        }


Procedimiento para guardar/modificar

Este procedimiento determina mediante una condición si guarda o modifica un registro.


private void profesorEntityBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(this.idLabel1.Text) || this.idLabel1.Text == "0")
            {
                if (connection.State != ConnectionState.Open)
                    connection.Open();

                SQLiteCommand command = connection.CreateCommand();
                command.CommandText = SQLInsert;

                command.Parameters.AddWithValue("id", Incremento());
                command.Parameters.AddWithValue("apellidos", this.apellidosTextBox.Text);
                command.Parameters.AddWithValue("nombres", this.nombresTextBox.Text);
                command.Parameters.AddWithValue("abreviatura", this.abreviaturaTextBox.Text);
                command.Parameters.AddWithValue("activo", this.activoCheckBox.Checked);

                command.ExecuteNonQuery();

                connection.Close();

            }
            else
            {
                if (connection.State != ConnectionState.Open)
                    connection.Open();

                SQLiteCommand command = connection.CreateCommand();
                command.CommandText = SQLUpdate;


                command.Parameters.AddWithValue("apellidos", this.apellidosTextBox.Text);
                command.Parameters.AddWithValue("nombres", this.nombresTextBox.Text);
                command.Parameters.AddWithValue("abreviatura", this.abreviaturaTextBox.Text);
                command.Parameters.AddWithValue("activo", this.activoCheckBox.Checked);
                command.Parameters.AddWithValue("id", this.idLabel1.Text);

                command.ExecuteNonQuery();
                connection.Close();
            }        

            search();

        }

Eliminar un registro
En el siguiente método se implementa una serie de código que elimina un registro de la tabla profesor mediante el campo principal, en este caso el ID.

private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(this.idLabel1.Text))
            {
                if (connection.State != ConnectionState.Open)
                    connection.Open();

                SQLiteCommand command = connection.CreateCommand();
                command.CommandText = SQLDelete;
                command.Parameters.AddWithValue("id", int.Parse(idLabel1.Text));
                command.ExecuteNonQuery();
                connection.Close();      

                search();
            }
        }


Entidad Profesor

En las siguientes líneas de código se hace referencia a los campos que conforma la tabla profesor, esto nos sirve para trabajar con los registros de la misma de manera independiente de la tabla.

public class profesorEntity
    {
        public int id { get; set; }
        public string apellidos { get; set; }
        public string nombres { get; set; }
        public string abreviatura { get; set; }
        public bool activo { get; set; }
        public string nomina
        {
            get { return string.Format("{0} {1} {2}", this.abreviatura, this.apellidos, this.nombres);
        }

    }

   
Este pequeño ejemplo de programación esta dirigido a programadores que recién están ingresando al mundo de la programación.

Alguna duda o ayuda en este tema, no duden en preguntar.







CUADRE DE CAJA TOUCH EN C#. Ver vídeo de demostración Que tal, en los actuales momentos la tecnología informática es una de las princ...