.NET Tutorial 22. Base de datos (Parte I)

Este espero que sea el primergranito de arena de una serie de tutoriales enfocados a la gestión y elmantenimiento de base de datos, ya bien sean bases de datos de Access, de SQL Server. En un futuro integraremos también MySQL.

Tal y como vimos en su día en el Tutorial 10, existen básicamente dos tipologías:

  • Arquitectura de "fichero" (por ejemplo Access)
  • Arquitectura de "servidor" (por ejemplo SQL Server, MySQL,…)

En dicho tutorial ya comentamos los pros y los contras de cada uno de estos sistemas.

Sin embargo existen una serie de conceptos que suelen ser comunes a ambos sistemas: el SQL (Structured Query Language).

El SQL por decirlo de alguna forma, en un "lenguaje de programación"con el cual se realizan diversas tareas en una base de datos,indistintamente si la base de datos es de Access, SQL Server, MySQL,etc.

Si bien es cierto que la inmensa mayoría de los motores de bases dedatos actuales soportan las "sentencias" SQL"estándar", puede quetengan particularidades puntuales.
Tampoco deberemos preocuparnos mucho por esto, ya que intentaremos en la medida de lo posible usar "sentencias" SQL "estándar".
De esta forma, dicha "sentencia" SQL, será válida tanto para una basede datos de Access, como para una base de datos de SQL Server, MySQL,etc.

IMPORTANTE: Bien, dicho esto, antesde empezar tiene que quedar claro como voy a usar las bases de datos eneste y en los sucesivos tutoriales:

NO usaré controles "bindeados" a ninguna base de datos.

Visual Basic.NET permite de alguna forma manejar las bases de datosde forma "visual" o "bindeada". Esto que a priori puede parecer unchollo y fácil de implementar (de hecho es facilísimo) a la larga daráproblemas en:

  • La implementación de la base de datos
  • Querer hacer algo "especial"

Nosotros lo que vamos a ver es como manejar la base de datos directamente.Podremos hacer con ella lo que nos de la real gana. Al final, veréisque no es tan complicado como parece o pueda parecer a priori.

Bien, visto esto, aclaremos una serie de conceptos básicos.

Normalmente una base de datos estará formada por una o más tablas.
A su vez, cada una de estas tablas estará formada por uno o mas campos.
Por último, una tabla está formada por "n" registros de campos.

Existen distintos tipos de campos. Deberíamos empezar a acostumbrarnos de utilizar el tipo correcto de campo.

Me explico. Supongamos que tenemos la tabla "Jugadores"
Supongamos que la tabla "Jugadores" tiene dos campos: "Nombre" y "Puntos"

A priori, en "Nombre" lo que meteremos será el "nombre" (Capitan Obvius 😉  del "Jugador"
Y en "Puntos" lo que meteremos serán los "puntos" del "Jugador"

El campo "Nombre" debería de ser de tipo "cadena". Y aún podríamos afinar mas.
Sisabemos que el nombre del jugador nunca será superior a 50 caracteres,podríamos definir que además de tipo "cadena" su longitud no seasuperior a 50. De esta forma "optimizamos" la base de datos

Ocurre tres cuartos de lo mismo con el campo "Puntos".
Dicho campo debería ser de tipo "numérico".
Existen distintos tipos de "números": bit, byte, word, float, real, etc.

¿Para que vamos a decir que "Puntos" es de tipo real (tropecientosbytes), cuando sabemos a ciencia cierta que los "Puntos nunca seránmayores a 9.999.999" (integer)

Sobre una base de datos, básicamente podremos hacer dos operaciones:

  • Consultas
  • Modificaciones

Con las "consultas" recuperamos información de las tablas, mientrasque con las "modificaciones" añadimos, borramos o actualizamosinformación en las tablas.

Dicho esto, tenemos que tener en cuenta que existen cuatro instrucciones básicas en el "lenguaje" SQL:

  • Selección (SELECT)
  • Inserción (INSERT)
  • Actualización (UPDATE)
  • Borrado (DELETE)

Las instrucciones de selección (SELECT) pertenecen a operaciones deconsulta, mientras que la inserción, actualización y borrado pertenecena las operaciones de modificación.

Por otro lado en la operación de selección pueden ocurrir dos cosas:

  • La consulta devuelve un conjunto de datos (a esto lo llamaremos DataSet)
  • La consulta sólamente devuelve un único valor (devuelve un campo)

Básicamente una "sentencia" en lenguaje SQL es una "cadena de texto"que le indica al motor de la base de datos que se va a realizar unaoperación de consulta o una operación de modificación.

Las "sentencias" en lenguaje SQL tienen su propia sintáxis. Existenlibros y libros y más libros sobre esto. Sería imposible recopilarlastodas en este blog. Os mostraré las más "básicas" (nada de INNER JOINS, GROUP, HAVING, UNION, etc)

SELECCIÓN

DataSet = SELECT * FROM [Jugadores]
DataSet = SELECT [nombre],[puntos] FROM [Jugadores]
DataSet = SELECT * FROM [Jugadores] ORDER BY [Nombre] DESC
Campo = SELECT [puntos] FROM [Jugadores] WHERE [Nombre] = ‘ollydbg’

Cómo véis las tres primeras sentencias devuelven un "conjunto de datos"(DataSet), mientras que la última sentencia devuelve un único campo(puntos en esta caso)

SELECT * FROM [Jugadores] se "traduce" a algo cómo:

"Seleccioname todos los campos de todos los registros de la tabla jugadores"

SELECT [nombre],[puntos] FROM [Jugadores] se "traduce" a algo cómo:

"Seleccioname el nombre y los puntos de todos los registros de la tabla jugadores"

SELECT * FROM [Jugadores] ORDER BY [Nombre] DESC se "traduce" a algo cómo:

"Seleccioname todos los campos de todos los registros de la tablajugadores, pero hazlo ordenandome el resultado por el campo nombre yademás de forma descendente"

Por último, SELECT [puntos] FROM [Jugadores] WHERE [Nombre] = ‘ollydbg’ se "traduce" a algo cómo:

"Devuelveme los puntos del jugador que tiene por nombre ollydbg"

SELECCIÓN SUMA 

campo =  SELECT SUM ([puntos]) AS TotalPuntos FROM [Jugadores] WHERE [Nombre] = ‘ollydbg’

Esta sentencia se traduce cómo: De la tabla jugadores, súmame todoslos puntos de todos los registros donde el nombre del jugador seaollydbg

Al igual que la SUMa, se puede calcular la desviación típica (AVG),que nos devuelva el valor mínimo (MIN), el valor máximo (MAX) o inclusoque nos cuente (COUNT) cuantos registros hay afectados.

 

INSERCIÓN

INSERT INTO [Jugadores]
   ([puntos]
   ,[nombre]
   ,[mapeado])
VALUES
   (100000
   ,’ollydbg’
   ,’map_lvl001′
   )

Esta sentencia SQL lo que hace es crear un nuevo registro en la tabla jugadores.
Lo que está indicando, es que en la tabla jugadores inserte un nuevo registro donde los campos serán:
campo puntos = 100000
campo nombre = ollydbg
campo mapeado = map_lvl001


ACTUALIZACIÓN

UPDATE [Jugadores]
   SET [puntos] = 999999
      ,[cambiado] = ‘True’
WHERE
   [nombre] = ‘ollydbg’ AND [mapeado] = ‘map_lvl001’
 

Esta sentencia SQL lo que hace es actualizar todos aquellosregistros de la tabla jugadores, donde el nombre del jugador seaollydbg y el mapeado sea map_lvl001. Para todos estos registros dondese cumplan estas dos condiciones, se modificará el valor del campopuntos y el campo cambiado, por los valores 999999 y Truerespectivamente.


BORRADO

DELETE FROM [Jugadores]

Esta sentencia borra todos los registros de la tabla jugadores

DELETE FROM [Jugadores] WHERE [nombre] = ‘ollydbg’

Esta sentencia borra todos los registros de la tabla jugadores donde el nombre sea ollydbg.

BORRADO con Truncado

TRUNCATE TABLE [Jugadores] 

Esta sentencia borra todos los registros de la tabla jugadores, peroademas, inicializa todos aquellos campos de tipo "autonumérico"

BORRADO de la tabla

DROP TABLE [Jugadores]

Esta sentencia  no borra los registros. Borra la TABLA de la base de datos.

 

Bueno, pues como habéis visto básicamente con las 4 intrucciones(SELECT, INSERT, UPDATE y DELETE) podremos manejar nuestra base dedatos.

Ya he dicho que de sentencias SQL hay para parar un tren. Estapágina en castellano está bastante bien por si queréis profundizar unpoco mas en el tema: http://sql.1keydata.com/es/

Yo he llegado a ver sentencias SQL de más de 2000 líneas, así que no desesperéis.

También existen lo que se denomina procedimientos almacenados. Es un tema muy intersante, pero que trataremos en sucesivos tutos.

 

Pues bien, todo lo que hemos explicado en esta entrega lo realizaremoscon módulo que vengo utilizando desde hace ya bastante tiempo.

En concreto el módulo se llama ModADOcommon.vb y lo podéis ver aqui: ModADOcommon.

Antes de que nadie se lleve las manos a la cabeza al ver todo "ese engendro" de código, ya os diré que es tremendamente simple de usar.  Todo está ENUMerado, de esta forma, usarlo es casi un juego de niños.

Además, no tenéis porque saber cual es el código interno de la función, por ejemplo CargarDataSet ( ) . Vosotros únicamente usáis la función y arreando. 😉

En las próximas entregas veremos como se usa dicho módulo.

 

Saludos.
mov eax,ollydbg; Int 13h  

Descargar ModADOcommon.vb
(34 KB. Visual Studio 2008)