Buen día para todos,

Continuando el tema anterior de las conexiones pasamos a un tema donde varios usuarios que empiezan en el mundo de la programación les cuesta comprender y como todos hemos pasado por esto que mejor forma que devolver a la comunidad lo que se ha recibido de esta misma.

Por tal motivo quiero compartir una clase creada dentro de un modulo que nos facilitara mucho las cosas, la verdad es que la hice lo mas sencilla posible que me resultara para mis propósitos, cada quien la puede adaptar a sus necesidades espero les sea de utilidad.

Bueno manos a la obra…

Para comenzar ya tengo creado un nuevo proyecto que he llamado «Tutorial_CRUD», el cual contiene un formulario y este a su vez contiene los siguientes controles:

  • 5 Botones que he nombrado así:
    • Name: BtnConexion – Text: Conexión
    • Name: BtnLeer – Text: Leer
    • Name: BtnAgregar – Text: Agregar
    • Name: BtnActualizar – Text: Actualizar
    • Name: BtnEliminar – Text: Eliminar
  • 3 Cajas de texto que he nombrado así:
    • Name: TxtId
    • Name: TxtNombres
    • Name: TxtApellidos
  • 3 Labels que les asigne los siguientes textos así:
    • Label1.text = Id
    • Label2.text= Nombres
    • Label3.text= Apellidos
  • 1 Datagridview que he nombrado así:
    • Name: DGTabla

Una vez terminado nuestro formulario debe tener una apariencia como la siguiente:

sshot-1

Paso seguido terminada la parte de agregar los controles necesarios para nuestro ejemplo, lo siguiente que necesitamos es agregar un nuevo modulo a nuestro proyecto que llamaremos «CRUD», esto lo hacemos dando clic derecho en el explorador de soluciones a nuestro proyecto y nos ubicamos sobre el menú agregar para seleccionar la opción «Modulo» tal como se muestra en la siguiente imagen.

sshot-2

Ahora que hemos creado nuestro modulo «CRUD» procedemos abrirlo dando doble clic y borramos todo lo que ahi en el momento que solo es «Module CRUD End Module», para proceder a crear los procedimientos necesarios para realizar las operaciones propuestas en este ejemplo, lo pimero que debemos hacer es identificar nuestra base de datos que para nuestro ejemplo es Access 2003 y que he creado en una carpeta en la ruta «C:\Tutorial_CRUD»  y la base la he nombrado «Datos.mdb» sin contraseña, nuestra ruta completa es la siguiente «C:\Tutorial_CRUD\Datos.mdb», ahora lo que sigue es ubicar nuestra cadena de conexión en la siguiente pagina:

https://www.connectionstrings.com/

Paso seguido debemos importar la libreria que nos permita manipular este tipo procedimientos la cual es «System.Data.Oledb», lo hacemos al inicio del modulo de la siguiente forma:

':::Importamos la libreria Oledb
Imports System.Data.OleDb

Ahora que ya hemos importado correctamente nuestra librería procedemos a declarar la clase que almacenara nuestros procedimientos, el nombre que le demos a nuestra clase sera el mismo que usaremos para declararla mas adelante y la declaramos así:

':::Declaramos nuestra clase de nombre CRUD
Public Class CRUD

End Class

Terminado de declarar nuestra clase procedemos a crear la conexión a nuestra base de datos para tener acceso a la misma y realizar todos los procedimientos que sean necesario, la conexión la creamos mediante el objeto «OleDbConnection» de la librería «OleDb» al cual le asignamos nuestra cadena de conexión y lo hacemos de la siguiente forma:

':::Creamos nuestra conexión a la base de Datos
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source=C:\Tutorial_CRUD\Datos.mdb")

El primer procedimiento que vamos a crear sera el que nos realice la prueba de la conexión a la base de datos y nos muestre si tenemos una conexión exitosa, para realizar este proceso utilizaremos la instrucción «Try» y declaramos nuestro nuevo procedimiento que llamaremos «conexión» de la siguiente forma:

Sub conexion()
       ':::Instruccion Try para capturar errores
       Try
          ':::Abrimos nuestro conexion con la propiedad Open
          con.Open()
          MsgBox("Conexión realizada de manera exitosa", MsgBoxStyle.Information, "Tutorial CRUD")
          ':::Y cerramos la conexion
          con.Close()
       Catch ex As Exception
          MsgBox("No se logro realizar la conexión debido: " & ex.Message, MsgBoxStyle.Critical, "Tutorial CRUD")
       End Try
End Sub

Ahora que ya tenemos nuestra conexión creada y hemos probado que se establece correctamente el siguiente procedimiento que crearemos sera para realizar consultas a nuestra base de datos, este procedimiento lo llamaremos «consulta» y tendrá los siguientes objetos:

  • OleDbDataAdapter: Nos permite crear una conexión entre la solicitud que realiza el usuario a la base y la respuesta que se obtiene de la base de datos, este objeto tiene la ventaja que no se necesita abrir primero la conexión a la base de datos debido a que es te objeto abre y cierra automáticamente la conexión una vez termina el proceso. Así mismo para que cumpla su función correctamente este objeto necesita que le pasemos dos parámetros muy importantes que son, el primero la instrucción que debe realizar y el segundo la conexión a la que debe realizar esa instrucción.
  • DataTable: Este objeto sera la tabla donde se almacenaran los datos que reciba el «DataAdapter» por parte de la base de datos.

Hasta ahora hemos visto los dos objetos que necesitamos para realizar nuestro procedimiento pero también debemos mostrar el resultado en alguna forma y lo haremos mediante un «DataGridView» que ya hemos defino anteriormente.

Para que nuestro proceso funcione correctamente debemos darle dos parámetros también los cuales serian, el primero seria el «DataGridView» donde mostraremos los resultados y el segundo la instrucción que necesita el «DataAdapter», para esto al momento de crear nuestro procedimiento le indicaremos que debe solicitar mediante la propiedad «ByVal» estos dos parámetros, tal cual como se muestra a continuación:

':::Creamos el procedimiento para la consulta y le indicamos que debe pedir 2 parametros para
':::ejecutarse correctamente (Tabla, Sql)
Sub consulta(ByVal Tabla As DataGridView, ByVal Sql As String)
     ':::Instruccion Try para capturar errores
     Try
        ':::Creamos el objeto DataAdapter y le pasamos los dos parametros (Instruccion, conexión)
        Dim DA As New OleDbDataAdapter(Sql, con)
        ':::Creamos el objeto DataTable que recibe la informacion del DataAdapter
        Dim DT As New DataTable
        ':::Pasamos la informacion del DataAdapter al DataTable mediante la propiedad Fill
        DA.Fill(DT)
        ':::Ahora mostramos los datos en el DataGridView
        Tabla.DataSource = DT
     Catch ex As Exception
        MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical,"Tutorial CRUD")
     End Try
End Sub

Ahora ya podemos realizar consultas a nuestra base de datos, también podemos obtener una respuesta y ademas mostrar este resultado de manera ordenada.

Continuamos, seguido crearemos un procedimiento que nos permita «Agregar, Actualizar y Eliminar» sin tener que crear procedimientos por separado para cada operación, para esto lo primero es crear el proceso con el nombre de «operaciones» el cual va a contener el siguiente objeto:

  • OleDbCommand: El cual almacenara la instrucción para la operación que se va a realizar, este objeto necesita también de dos (2) parámetros, el primero la instrucción que debe realizar y el segundo la conexión a la que debe realizar esa instrucción. A diferencia del objeto anterior (DataAdapter) el «Command» necesita que abramos y cerremos la conexión debido a que el no lo hace automáticamente.
    • ExecuteNonQuery: Es una propiedad del objeto «Command» y su función es ejecutar la instrucción que se ha recibido.

Una vez teniendo claro estos conceptos nuestro procedimiento debe quedar así:

':::Creamos el procedimiento para Agregar, Actualizar y Eliminar ademas le indicamos que debe pedir
':::2 parametros para ejecutarse correctamente (Tabla, Sql)
Sub operaciones(ByVal Tabla As DataGridView, ByVal Sql As String)
    ':::Abrimos la conexion
    con.Open()
    ':::Instruccion Try para capturar errores
    Try
       ':::Creamos nuestro objeto de tipo Command que almacenara nuestras instrucciones
       ':::Necesita 2 parametros (Instruccion, conexion)
       Dim cmd As New OleDbCommand(Sql, con)
       ':::Ejecutamos la instruccion mediante la propiedad ExecuteNonQuery del command
       cmd.ExecuteNonQuery()
    Catch ex As Exception
       MsgBox("No se logro realizar la operación por: " & ex.Message, MsgBoxStyle.Critical, "Tutorial CRUD")
    End Try
    ':::Cerramos la conexion
    con.Close()
End Sub

 

Y con esto hemos terminado la creación de nuestra clase para las operaciones CRUD, pero todavía no estamos haciendo ninguna operación recordemos que los procedimientos están a la espera de que se les de una instrucción para saber que deben hacer, para esto cerramos nuestro modulo ya que no lo vamos a utilizar y nos ubicamos en el formulario, comenzaremos con el primer botón que hemos creado y le dimos el texto «Conexión» damos doble clic en el botón para configurar.

Seguido lo primero que debemos hacer es crear un objeto que nos comunique con nuestra clase que para recordar hemos llamado «CRUD», este objeto debe ser declarado de manera global para no tener que estar repitiendo este proceso, esto lo haremos justo debajo de donde se inicia la clase del formulario.

Una vez creado nuestro objeto solo necesitamos llamar al procedimiento que nombramos «conexion» de la siguiente forma:

Public Class Form1
 ':::Creamos un objeto para establecer conexion con nuestra clase CRUD
Dim Obj As New CRUD

Private Sub BtnConexion_Click(sender As Object, e As EventArgs) Handles BtnConexion.Click
    ':::Mediante el objeto que creamos accedemos al procedimiento "conexion"
    Obj.conexion()
End Sub
End Class

Ejecutamos nuestro proyecto y damos clic en le botón «Conexión» y como vemos nos indica que la conexión fue exitosa.

sshot-3

Como ya probamos nuestra conexión a la base de datos seguimos con el siguiente botón que le hemos dado como texto «Leer» y damos doble clic para configurar. Ahora en la configuración del botón lo primero que debemos hacer es crear una variable de tipo «string» que para mayor facilidad la llamaremos «Sql» y que sera la encargada de guardar la instrucción que le asignaremos, dicha instrucción es una consulta SQL a nuestra base de datos que tiene una sola tabla y tres (3) campos.

sshot-4
Base de Datos en Access 2003

La instrucción SQL que utilizaremos sera «Select * from Clientes» para que nos traiga de la base datos todos los registros que tiene la tabla «Clientes» que para nuestro ejemplo solo sera un (1) registro, recordemos que debemos usar el objeto que hemos creado de manera global para acceder al procedimiento «consulta» de nuestra clase «CRUD» y que dicho procedimiento nos va a pedir dos (2) parámetros, el primero sera el nombre del «DataGridView» donde nos mostrara el resultado y el segundo que es la instrucción que hemos almacenado en la variable que acabamos de crear, el código para el botón «Leer» nos debe quedar así.

Private Sub BtnLeer_Click(sender As Object, e As EventArgs) Handles BtnLeer.Click
   ':::Creamos la variable Sql que guardar la instruccion de tipo SQL
   Dim Sql As String = "Select * from Clientes"
   ':::Mediante el objeto que creamos globalmente y nombramos "Obj"
   ':::Accedemos a nuestro procedimiento "consulta" y le pasamos los
   ':::dos (2) parametros (DGTabla, Sql)
   Obj.consulta(DGTabla, Sql)
End Sub

Como vemos la clase funciona correctamente, esta solicitando los parámetros, los esta recibiendo y esta retornando un resultado de forma ordenada.

sshot-5

Seguimos con el siguiente botón que hemos le hemos dado el texto «Agregar», repetimos los mismos pasos que en el botón «Leer», en lo único que modificaremos sera en la consulta SQL y el nombre del procedimiento que en este caso es «operaciones» y nos debe quedar así.

Private Sub BtnAgregar_Click(sender As Object, e As EventArgs) Handles BtnAgregar.Click
    ':::Creamos la variable Sql que guardar la instruccion de tipo SQL
    Dim Sql As String = "Insert Into Clientes (Id, Nombres, Apellidos) Select "& TxtId.Text &", '"& TxtNombres.Text  &"', '"& TxtApellidos.Text &"'"
    ':::Cambiamos el nombre del procedimiento "operaciones"
    Obj.operaciones(DGTabla, Sql)
End Sub

Ahora realizamos una prueba con los siguientes datos:

  • Id= 2
  • Nombres= Maria
  • Apellidos= Morales

Damos clic en el botón «Agregar» y luego en el botón «Leer», Como vemos la clase funciona correctamente, esta solicitando los parámetros, los esta recibiendo y esta ejecutando la instrucción que le hemos dado.

sshot-6

Continuamos con el siguiente botón que hemos dado de texto «Actualizar», repetimos los mismos pasos que en el botón «Agregar», en lo único que modificaremos sera en la consulta SQL y el nombre del procedimiento sera el mismo «operaciones» y nos debe quedar así.

Private Sub BtnActualizar_Click(sender As Object, e As EventArgs) Handles BtnActualizar.Click
    ':::Creamos la variable Sql que guardar la instruccion de tipo SQL
    Dim Sql As String = "Update Clientes Set Nombres='"& TxtNombres.Text &"', Apellidos='"& TxtApellidos.Text &"' where Id="& TxtId.Text &""
    Obj.operaciones(DGTabla, Sql)
End Sub

Ahora realizamos una prueba con los siguientes datos:

  • Id= 2
  • Nombres= Ana
  • Apellidos= Rosado

Damos clic en el botón «Actualizar» y luego en el botón «Leer», Como vemos la clase funciona correctamente, esta solicitando los parámetros, los esta recibiendo y esta ejecutando la instrucción que le hemos dado.

sshot-7

Por ultimo terminamos con el botón que hemos dado de texto «Eliminar», repetimos los mismos pasos que en el botón «Agregar», en lo único que modificaremos sera en la consulta SQL y el nombre del procedimiento sera el mismo «operaciones» y nos debe quedar así.

Private Sub BtnEliminar_Click(sender As Object, e As EventArgs) Handles BtnEliminar.Click
   ':::Creamos la variable Sql que guardar la instruccion de tipo SQL
   Dim Sql As String = "Delete * From Clientes Where Id="& TxtId.Text &""
   Obj.operaciones(DGTabla, Sql)
End Sub

Ahora realizamos una prueba con los siguientes datos:

  • Id= 2

Damos clic en el botón «Eliminar» y luego en el botón «Leer», Como vemos la clase funciona correctamente, esta solicitando los parámetros, los esta recibiendo y esta ejecutando la instrucción que le hemos dado.

sshot-8


Con esto hemos terminado este tutorial que se ha extendido un poco, pero la idea es explicar en detalle el funcionamiento de esta clase, que como apreciamos solo necesitamos de dos (2) lineas de código para realizar las operaciones «CRUD», la ventaja de trabajar con esta clase viene en los proyectos donde trabajaremos con una base de datos con varias tablas y necesitaremos realizar estas mismas operaciones una y otra vez, para lo cual solo seguiremos necesitando las mismas dos (2) lineas de código ahorrándonos tiempo y trabajo. También es importante destacar que la clase funciona correctamente independientemente de la base de datos que usemos, solo basta con modificar la cadena de conexión.

En este ejemplo utilizamos una base de datos en Access, pero para SQLite y MySQL solo basta con cambiar las librerías y los objetos tal como lo muestro ahora:

':::Para SQLite importamos la libreria correspondiente
Imports System.Data.SQLite
':::Para MySQL importamos la libreria correspondiente
Imports MySql.Data.MySqlClient

'________________________________________________________________

':::Para el objeto de conexion usamos el objeto segun corresponda
':::SQLite conexion
Dim con as new SQLiteConnection

':::MySQL conexion
Dim con as new MySqlConnection

'_______________________________________________________________

':::Lo mismo con los otros objetos
':::SQLite
Dim Da as new SQLiteDataAdapter
Dim cmd as new SQLiteCommand

':::MySQL
Dim Da as new MySqlDataAdapter
Dim cmd as new MySqlCommand

El proyecto y la base de datos usada para este ejemplo los dejo en «Mega» para que lo descarguen y estudien, lo puede encontrar en el siguiente link.

https://goo.gl/r18JJL

Les dejo también el link al post donde les explico las conexiones a diferentes bases de datos.

Conexión entre Visual Basic .Net y Access, MySQL y SQLite

Cualquier duda estaré presto a colaborarles en todo lo que me este posible.

Buen día para todos.