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();
}
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.