Revista Informática

[Tutorial] Crear formulario de login en .NET y SQL Server

Publicado el 27 junio 2013 por Ferranmunoz @ferran_munoz

visual basic logoEn mi experiencia como programador de programas de gestión, cuando realizo una aplicación y esa aplicación sé que la utilizará bastantes usuarios, lo primero que diseño y creo (aparte de la estructura de la aplicación) es la pantalla de inicio, altamente llamada “Login”. El objetivo de esa pantalla es que el usuario introduzca su nombre de usuario y su contraseña para que, si los datos son correctos, pueda utilizar la aplicación. Pues bien, en este ejemplo os voy a explicar paso a paso como hacer login en .NET y SQL Server (podéis utilizar la versión Express, que es gratuita).

1.- SQL Server: Montar la tabla “Usuario”

Vamos a ir a la base de datos (en caso de no tener ninguna base de datos, creadla) y vamos a crear una tabla llamada “Usuario”. Esta tabla tendrá como objetivo almacenar a los usuarios que tendrán acceso a la aplicación. Esta tabla tendrá los siguientes campos:

  • DNI: DNI (o NIE) del usuario (clave primaria)
  • Nombre: Nombre del usuario
  • Apellidos: Apellidos del usuario
  • Email: Correo electrónico del usuario (si tiene)
  • Contraseña: Contraseña del usuario
  • Activo: Denota si el usuario está activo o no

2.- SQL Server: Crear el procedimiento “log_usuario”

Siempre se ha recomendado que las consultas se ejecuten directamente desde la base de datos, llamando al procedimiento desde el código de la aplicación. Pues dicho y hecho, vamos a crear un procedimiento (en bases de datos esto se llama “Stored Procedure” o “Procedimiento almacenado”) al cual le pasaremos dos parámetros y nos devolverá el resultado de una consulta realmente sencilla.

1
2
3
4
5
6
7
CREATE PROC log_usuario
@dni CHAR(9),
@contraseña VARCHAR(100)
AS
BEGIN
SELECT * FROM usuario WHERE DNI=@dni AND Contraseña=@contraseña AND Activo=1
END

Nombraremos al procedimiento “Log_usuario” y le pasaremos dos parámetros: el DNI y la contraseña. Entonces, con estos parámetros ejecutaremos una consulta para ver si hay algún registro con ese DNI y esa contraseña. Además, el usuario tiene que estar activo.

Una vez tengamos el procedimiento almacenado, lo ejecutaremos y quedará guardado en la base de datos esperando que alguien haga una llamada a ese procedimiento.

Con esto ya tenemos la base de datos preparada. Pasemos a la programación.

3.- .NET: Diseñar el formulario

Una vez con la base de datos preparada, vamos a preparar la parte de Visual Studio. Cabe decir que el ejemplo que veréis lo he realizado en Visual Basic .NET, pero podéis utilizar los demás lenguajes que vienen en Visual Studio, tales como C++ o C#. Eso si, adaptando el código para cada lenguaje.

Para la parte del diseño de formulario cogeremos un simple formulario de Windows (también conocido como Windows Forms)

Introduciremos dos labels, dos textbox y un botón para validarnos. A partir de aquí sois libres de poder poner lo que queráis (imágenes, menús, etc.). Para el ejemplo tenéis que tener algo parecido a esto:

vbnet login form

Por cierto, la propiedad “PasswordChar” del textbox de la contraseña ha de tener el símbolo del asterisco, para que no se vea lo que se escriba.

vbnet PasswordChar

Con esto, la parte del diseño del formulario ya estará lista.

4.- .NET: Picar el código

Haremos doble click en el botón y introduciremos el siguiente código. El botón tiene la siguiente lógica:

  • Si los textbox tienen contenido: nos conectamos a la base de datos, ejecutamos el Stored Procedure que hemos llamado “log_usuario” pasandole los argumentos (que será el contenido de los textbox).
    • Si la consulta devuelve una fila (Hasrows): mostraremos un mensaje confirmando que existe ese usuario.
    • Si la consulta no devuelve ninguna fila: mostraremos un mensaje de error indicando que no existe ese usuario o que no está activo.
  • Si los textbox no tienen contenido: mostramos un mensaje de error indicando al usuario que introduzca todos los datos.

Muy importante: tenéis que utilizar el espacio de nombres (namespace) llamado system.data.sqlclient. Para ello, una vez esteis dentro del diseñador del formulario, tendréis que escribir lo siguiente: imports system.data.sqlclient. Ha de quedar como la imagen

vbnet imports system data sqlclient

Una vez hecho el inciso, pasemos al código del botón:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Private Sub Button1_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles Button1Click
     'declaramos las variables a utilizar
     Dim cnn As SqlConnection
     Dim cmd As SqlCommand
     Dim dr As SqlDataReader
 
     'Si el textbox1 (DNI) y el textbox2 (contraseña) tiene algún campo, procederemos a mirarlo
     If TextBox1TextLength <> 0 And TextBox2TextLength <> 0 Then
          'hacemos un try/catch por si falla la conexión a la base de datos
          Try
               'nos conectamos a la base de datos
               ''AQUI PONDREMOS LA CADENA DE CONEXIÓN CON LA BASE DE DATOS
               cnnOpen()
 
               'llamamos el procedimiento almacenado
               cmd = New SqlCommand("log_usuario", cnn)
               cmdCommandType = CommandTypeStoredProcedure
 
               'introducimos los parámetros
               With cmdParameters
                    AddWithValue("@dni", textbox1text)
                    AddWithValue("@contraseña", textbox2text)
               End With
 
               'ejecutamos la consulta
               dr = cmdExecuteReader
 
               'si tiene un resultado, quiere decir que el usuario existe y que está activo
               If drHasRows Then
                    'el usuario existe y está activo
                    MessageBoxShow("El usuario existe", "Ejemplo login - OK", MessageBoxButtonsOK, MessageBoxIconInformation)
               Else
                    'el usuario no existe o no está activo
                    MessageBoxShow("El usuario no existe o no está activo", "Ejemplo login - Error", MessageBoxButtonsOK, MessageBoxIconError)
               End If
               Catch ex As Exception
                    Messageboxshow(exmessage)
               Finally
                    'desconectamos de la base de datos
                    If cnnState = ConnectionStateOpen Then
                         cnnClose()
                    End If
          End Try
     Else
          'Quiere decir que falta algún campo por llenar
          Messageboxshow("Por favor, rellene todos los campos", "Ejemplo login - Error", MessageBoxButtonsOK,MessageBoxIconError)
     End if
End Sub

5.- Notas finales

Este código es bastante sencillo: lo único que hace es realizar una consulta a una base de datos SQL Server y devolver un resultado. Con esto quiero decir que es posible escalarlo y ampliarlo con más y más funciones (por ejemplo, podemos crear la función para que calcule la letra del DNI y que en caso de que no corresponda pues enviar una alerta).

Es más, en el ejemplo no he cifrado la contraseña (para facilitar el tutorial), pero las contraseñas siempre (de hecho, es altamente recomendable) tienen que estar cifradas para mayor seguridad. Hay funciones de encriptación, o puedes crearte una función propia para almacenar y consultar datos cifrados.

O en caso de desarrollar una aplicación en n-capas, trocearíamos el código y pondríamos cada sección en su sitio:

  • Capa de datos: aquí guardaremos la parte de la conexión
  • Capa de negocio: aquí crearíamos una clase donde tendríamos toda la lógica del formulario “login”
  • Capa de presentación: el formulario solamente se encargaría de hacer un llamamiento a la capa de negocio y le pasaríamos los parámetros de los textbox

Es lo bueno que tiene la programación, que los límites los pones tu. Mientras tanto, podéis hacer los programas tan grandes como queráis. Pero para haceros el ejemplo, con esto es más que suficiente. Espero que os haya servido de ayuda y, como siempre, tenéis la sección de comentarios para que podáis decir la vuestra.


Volver a la Portada de Logo Paperblog