Lo haremos usando componentes "normales", en vez de los predefinidos que permiten acceder a bases de datos. Tendremos una ventana principal, que muestre los datos actuales en un ListView, y que incluya un botón para añadir datos nuevos:
El botón de "Añadir" mostrará un segundo formulario, que será el que pida los datos:
Lo podemos hacer dando los siguientes pasos (en Visual C# 2008):
- Crear un nuevo proyecto, que sea una "Aplicación de Windows Forms"
- En la ventana principal, añadir un ListView y un botón.
- Personalizar el ListView usando la pestaña de propiedades, de modo que tenga dos columnas (una para el código y otra para el nombre), y que como modo de visualización ("View") tenga el de "detalles" ("Details").
- Crear una segunda ventana, desde el menú "Proyecto", en la opción "Agregar Windows Forms".
- Añadir a esa ventana dos TextBox para los textos que introducirá el usuario, junto con sus Label para los textos aclaratorios y un botón para confirmar.
- Añadir el fichero DLL a las referencias del proyecto (en la ventana del "Explorador de soluciones", pulsando el botón derecho sobre "References", y escogiendo el fichero System.Data.SQLite.DLL desde la pestaña "Examinar").
- Completar el código fuente del proyecto.
La de rellenar el ListView (que se llamaría al final del contructor, y después de cada introducción de un nuevo dato) podría ser así:
1: private void ActualizarListaCiudades()
2: {
3: conexion =
4: new SQLiteConnection
5: ("Data Source=personal.sqlite;Version=3;New=False;Compress=True;");
6: conexion.Open();
7:
8: lstCiudades.Items.Clear();
9:
10: // Lanzamos la consulta y preparamos la estructura para leer datos
11: string consulta = "select * from ciudad";
12: SQLiteCommand cmd = new SQLiteCommand(consulta, conexion);
13: SQLiteDataReader datos = cmd.ExecuteReader();
14: // Leemos los datos de forma repetitiva
15: while (datos.Read())
16: {
17: string codigo = Convert.ToString(datos[0]);
18: string nombre = Convert.ToString(datos[1]);
19: // Y los mostramos
20: ListViewItem item = new ListViewItem(codigo);
21: item.SubItems.Add(nombre);
22: lstCiudades.Items.Add(item);
23: }
24: conexion.Close();
25: }
Y la de añadir otro dato podría sería así:
1: private void InsertarDatos(string codigo, string nombre)
2: {
3:
4: string insercion; // Orden de insercion, en SQL
5: SQLiteCommand cmd; // Comando de SQLite
6:
7: conexion =
8: new SQLiteConnection
9: ("Data Source=personal.sqlite;Version=3;New=False;Compress=True;");
10: conexion.Open();
11:
12: try
13: {
14: insercion = "INSERT INTO ciudad " +
15: "VALUES ('"+codigo+"','"+nombre+"');";
16: cmd = new SQLiteCommand(insercion, conexion);
17: cmd.ExecuteNonQuery();
18: }
19: catch (Exception e)
20: {
21: MessageBox.Show(
22: "No se ha podido insertar. Posiblemente un codigo esta repetido",
23: "Aviso");
24: }
25: conexion.Close();
26: }
De modo que la acción completa sobre el botón de "Añadir" sería algo como
1: private void btAnadir_Click(object sender, EventArgs e)
2: {
3: ventanaAnadir.Limpiar();
4: ventanaAnadir.ShowDialog();
5: InsertarDatos(ventanaAnadir.GetCodigo(), ventanaAnadir.GetNombre());
6: ActualizarListaCiudades();
7: }
Y aquí puedes descargar el proyecto, con los dos fuentes, los ficheros DLL y el ejecutable: csharp_sqlite2.zip
2 comentarios:
Primero gracias por el articulo es genial. Pero tengo una duda ¿no seria mejor hacerlo con databindings? ¿cuales son las ventajas o inconvenientes?
Hola amigo.. gracias por el juguete, está bastante bueno. Mi duda pasa porque al crear un proyecto nuevo no deja agregar las referencias a la sqlite3.dll me reclama que no puede agregarla. No sé si me salté algún paso, o si hay que compilar primero esa dll de forma local, no se (por que el ejemplo que subiste, lo puedo ejecutar/debuggear sin problemas)...
Bueno, eso... y gracias...
Publicar un comentario