Como crear un proyecto en vbnet en 3 capas:
Inicio de Sesión
Implementar un proyecto en 3 capas + Sql Server + Store Procedure Requerimientos previos:
-
Facilita su desarrollo al mantener un orden y
separar las responsabilidades.
-
Ayuda a reutilizar el código.
-
Es escalable, ósea facilita a la modificación del
proyecto en etapas avanzadas y en modificaciones futuras luego de
concluir el proyecto.
-
Fácil entendimiento del código fuente.
-
Facilidad de migración de base de datos, entre
otros.
Creando la solución
Implementar el proyecto
-
Creamos el proyecto: "Archivo/Nuevo Proyecto..."
Con el nombre de "SisPamf" (o elegimos el
nombre que mejor les parezca)
Debe quedar de la siguiente forma:
-
Agregamos un nuevo proyecto (la Capa Lógica de
Negocio): "Archivo/Agregar/ Nuevo proyecto..."

El sistema nos pedirá guardar el proyecto;
deberás guardarlo con el nombre de SisPamf (o el nombre de tu
proyecto elegido)
Entonces tendremos lo siguiente
-
Agregamos la Capa de Acceso a Datos:
"Archivo/Agregar/Nuevo proyecto..."; con el nombre de "AccesoDatos" y
aceptar.
-
Agregar "Entidades" para nuestro proyecto:
"Archivo/Agregar/Nuevo proyecto..."; con el nombre de "Entidades" y
aceptar

Nuestro Explorador de soluciones debería quedar
de la siguiente forma, ¿Notan la división de las capas?.
-
Ahora tenemos que agregar las "referencias" a
los proyectos, los cuales quedarán de la siguiente forma:
-
Capa Presentación tendrá como referencia a:
Capa Entidad y Capa Lógica: Clic derecho al nombre del proyecto "SistPamf"
(Capa de Presentación) en el Explorador de soluciones, y seleccionar
"Agregar Referencia"; una vez dentro, marcamos "Entidades" y
"Lógica" y luego aceptamos.
-
Capa Lógica tendrá como referencia a: Capa
Entidad y Capa Acceso a Datos: Clic derecho al nombre del proyecto "SistPamf"
(Capa de Presentación) en el Explorador de soluciones, y seleccionar
"Agregar Referencia"; una vez dentro, marcamos "AccesoDatos" y
"Entidades" y luego aceptamos.
-
Ahora Crearemos una base de datos SQL con el
nombre de: "Prueba_BD" Y ejecutaremos el siguiente script para la
creación de la tabla y el procedimiento almacenado (Store Procedure):
USE [Prueba_BD]
2 GO
3
/******
Object: Table [dbo].[Usuarios] Script Date:
11/03/2018 16:13:39 ******/
4
SET ANSI_NULLS
ON
5 GO
6
SET QUOTED_IDENTIFIER
ON
7 GO
8
SET ANSI_PADDING
ON
9 GO
10 CREATE
TABLE
[dbo].[Usuarios](
11 [Id_Usuario]
[int] IDENTITY(1,1)
NOT NULL,
12 [NombreUsuario]
[varchar](15)
NOT NULL,
13 [Contraseña]
[varchar](50)
NOT NULL,
14 [Estado]
[nchar](1)
NOT NULL
15
) ON
[PRIMARY]
16 GO
17
SET ANSI_PADDING
OFF
18 GO
19
SET IDENTITY_INSERT
[dbo].[Usuarios]
ON
20
INSERT
[dbo].[Usuarios]
([Id_Usuario], [NombreUsuario],
[Contraseña], [Estado])
VALUES (1, N'Oswaldo',
N'123',
N'1')
21
SET IDENTITY_INSERT
[dbo].[Usuarios]
OFF
22
/******
Object: StoredProcedure [dbo].[S_ValidarUsuario]
Script Date: 11/03/2015 15:15:40 ******/
23
SET ANSI_NULLS
ON
24 GO
25
SET QUOTED_IDENTIFIER
ON
26 GO
27
--
=============================================
28
-- Author:
xxx
29
-- Create date:
<31/10/2017>
30
-- Description:
<Ejemplo >
31
--
32
--
=============================================
33 CREATE PROCEDURE
[dbo].[S_ValidarUsuario]
34 --
Add the
parameters for the stored procedure here
35 @Usuario as
varchar(20)
36 AS
37
BEGIN
38 --
SET NOCOUNT
ON added
to prevent extra result sets
from
39 --
interfering with SELECT statements.
40 SET
NOCOUNT ON;
41
42
--
Insert statements for
procedure here
43 SELECT
Id_Usuario, NombreUsuario,
Contraseña, Estado
from Usuarios
where NombreUsuario=@Usuario
and Estado='1'
44
END
45 GO
Para este ejemplo utilizaremos un la clase
SqlHelper.vb (Encontraremos el link líneas arriba), el cual brinda un
conjunto de métodos necesarios para la conexión con la base de datos, de
esta forma solo necesitaremos sólo esta clase para nuestra capa Acceso a
Datos.
Para hacer esto realizamos lo siguiente:
Primero copiamos el archivo descargado en la carpeta "AccesoDatos"
que se creo en la raíz de nuestro proyecto.
Al copiar nos debería quedar así:
Ahora, agregamos la clase "SqlHelper.vb": Clic
derecho en Acceso a datos en explorador de soluciones,
"Agregar/Elemento existente..."
Seleccionamos la clase SqlHelper.vb y aceptamos
Una vez que agregamos la clase, tendremos la
capa de acceso a datos listo para la conexión con la base de datos,
ahora nos pasamos a la "Entidades"
-
Procedemos a crear la clase que utilizaremos para
nuestro inicio de sesión. Clic derecho en "Entidades" en el explorador
de soluciones, luego en "Agregar/Clase..."
Con el nombre de "UsuarioE":

Con el siguiente código:
Public
Interface I_UsuarioE
2
Property
iId_Usuario()
As
Integer
3
Property
iNombreUsuario()
As
String
4
Property iContraseña()
As
String
5
Property
iEstado()
As String
6
End Interface
7
Public Class UsuarioE
8
Implements I_UsuarioE
9
10
Private xId_Usuario
As
String =
""
11
Private xNombreUsuario
As
String =
""
12
Private xContraseña
As
String =
""
13
Private xEstado
As
String =
""
14
15
Public Property iContraseña
As
String Implements I_UsuarioE.iContraseña
16
Get
17
Return xContraseña
18
End Get
19
Set(ByVal
Value As
String)
20
xContraseña = Value
21
End Set
22
End Property
23
24
Public Property iEstado
As
String Implements I_UsuarioE.iEstado
25
Get
26
Return xEstado
27
End Get
28
Set(ByVal
Value As
String)
29
xEstado = Value
30
End Set
31
End Property
32
Public Property iId_Usuario
As
Integer Implements I_UsuarioE.iId_Usuario
33
Get
34
Return xId_Usuario
35
End Get
36
Set(ByVal
Value As
Integer)
37
xId_Usuario = Value
38
End Set
39
End Property
40
Public Property iNombreUsuario
As
String Implements I_UsuarioE.iNombreUsuario
41
Get
42
Return xNombreUsuario
43
End Get
44
Set(ByVal
Value As
String)
45
xNombreUsuario = Value
46
End Set
47
End Property
48
End Class
El código fuente lo podemos encontrar en el
archivo final del ejemplo.
-
Proceder a crear la clase "UsuarioL" en la "Capa
Lógica de Negocio": hacemos clic derecho en "Lógica" en el Explorador de
Soluciones, seleccionamos "Agregar/ Clase..", y nos aparecerá el
siguiente.
Creamos la clase "UsuarioL"

Y escribimos el siguiente código en el.
1
Imports Entidades
'Hacemos referencia a las Entidades de nuestro proyecto"
2 Imports
AccesoDatos 'Hacemos referencia a la
Capa de Acceso a Datos"
3
Public Interface I_USUARIOL
4
'Creamos la función Validar Contraseña y
enlazamos con la entidad
5
Function ValidarContraseña(ByVal
ConecX As
String,
ByVal eUsuarioE
As Entidades.UsuarioE)
As
Boolean
6
End Interface
7
Public Class UsuarioL
8
Implements I_USUARIOL
9
10
Public Function ValidarContraseña(ConecX
As
String, eUsuarioE
As UsuarioE)
As
Boolean Implements I_USUARIOL.ValidarContraseña
11
Dim Ds_Usuario
As DataSet
12
Dim xExiste
As
Integer
13
Dim strSP
As
String =
"S_ValidarUsuario"
'Aquí va el nombre del Procedimiento
almacenado de nuestro SQL Server
14
Try
15
'A la Base de datos solamente le vamos a
enviar el Nombre de Usuarios
16
Ds_Usuario = SqlHelper.ExecuteDataset(ConecX,
strSP, eUsuarioE.iNombreUsuario)
'Agregamos las variables de "Entidades"
que vamos a usar
17
18
xExiste = Ds_Usuario.Tables(0).Rows.Count
'Verificamos existen datos de nuestras
credenciales
19
If xExiste
<> 0
Then '
Al ubicar nuestro usuario, el registro que obtenemos debe ser mayor
a 0
20
If Ds_Usuario.Tables(0).Rows(0).Item(2).ToString
= eUsuarioE.iContraseña
Then
'Aquí vericaremos si la contraseña es igual al que le enviamos, el
Item(2) indíca que obtendra el dato de la columna que esta posición
3
21
Return True
'En caso de ser la contraseña correcta,
retornaremos el valor de true a nuestra capa presentación
22
End If
23
Else
24
Return False
'En caso de ser la contraseña
incorrecta, retornaremos el valor de false a nuestra capa
presentación
25
End If
26
'El motívo por el cual solo se envía el
usuario a la base de datos es para evitar los ataques "SQL Inyection"
27
Catch ex As Exception
28
Throw ex
29
End Try
30
End Function
31
End Class
-
Ahora creamos el formulario para nuestro inicio de
sesión. Clic derecho en el "Explorador de Soluciones" y luego
seleccionamos "Agregar/Windows Forms..."
Creamos el formulario con el nombre de "LoginForm1"
Con este formulario que viene en forma
predeterminada en el visual studio, tendremos lo necesario para
realizar nuestro formulario de inicio de sesión.
Hacemos doble clic en el botón aceptar
formulario LoginForm1 y tendremos lo siguiente

Remplazamos por el siguiente código
1 Imports Entidades
'Improtamos la clase Entidades
2
Public Class LoginForm1
3
Public ConecX
As
String 'Creación de la variable
para el string de conexión
4
Dim ObjUsuarioL
As New Logica.UsuarioL
'agregamos nuestro objeto UsuarioL para
obtener los metodos que usaremos
5
Dim ObjUsuarioE
As New Entidades.UsuarioE
'Creación del Objeto en Entidades
6
Dim xCont
As
Integer 'Será nuestro contador de
Intentos de sesión
7
8
Private Sub
OK_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles OK.Click
9
ValidarUsuario()
10
End Sub
11
12
Private Sub
Cancel_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles Cancel.Click
13
Me.Close()
14
End Sub
15
Private Sub
ValidarUsuario()
16
'Sera nuestro string de conexión con la
base de datos
17
'Data source: es el nombre de nuestro
servidor SQL
18
'Initial catalog: es el nombre de
nuestra base de datos
19
'User id: es el usuario de inicio de
sesión en el Sql Server
20
'Password: es la contraseña utilizada
para el inicio de sesión del sql server
21
22
'Este línea de conexión puede ser creado
en un Módulo a parte como variable global,
23
'pero como solo tendremos un formulario
y esto es un ejemplo lo dejaremos así
24
ConecX =
"data source = DALOWOS\LINK;
initial catalog = Prueba_BD; user id = sa; password =dalowos"
25
26
'Creación de las variables locales
27
Dim xUsuario
As
String
28
Dim xPassword
As
String
29
Dim xExiste
As
Boolean ' esta variable como
indicador de la existencia del usuario en la base de datos
30
31
32
xExiste =
False
33
xUsuario =
""
34
xPassword =
""
35
36
ObjUsuarioE.iNombreUsuario
= UsernameTextBox.Text
' Asignamos el valor del texto Usuario a
nuestra Entidad
37
ObjUsuarioE.iContraseña
= PasswordTextBox.Text
' Asignamos el valor del texto
Contraseña a nuestra Entidad
38
xExiste = ObjUsuarioL.ValidarContraseña(ConecX,
ObjUsuarioE)
'Enviamos el objeto ObjUsuario a nuestra
capa de lógica
39
40
If xExiste
= True
Then
41
MsgBox("la
contraseña es correcta, bienvenido la Sistema",
MsgBoxStyle.OkOnly)
42
Else
43
MsgBox("Usuario
y/o Contraseña incorrecta",
MsgBoxStyle.Critical,
"Informe de Error")
44
If xCont
= 3
Then
'En caso llegar al tercer intento te saldrá el siguiente mensaje de
error y te expulsará del sistema
45
MsgBox("Exedió
el número de intentos",
MsgBoxStyle.Critical,
"Informe de Error")
46
Me.Close()
47
End If
48
xCont +=
1
'Aquí sumaremos +1 cada vez que el usuario se equivoca al ingresar
49
End If
50
End Sub
51
52
Private Sub
LoginForm1_Load(sender
As Object,
e As EventArgs)
Handles MyBase.Load
53
'Inicamos variables
54
'Contador en 1
55
xCont =
1
56
End Sub
57
End Class
No olvidar eliminar el Form1 para que lo
primero que aparezca sea el LoginForm1.
-
Ahora realizamos las pruebas (La parte donde nos
alegramos al ver que todo funciona)
Nos tendría que salir el formulario que hemos
creado "FormLogin1"
Utilizamos las siguientes credenciales para
ingresar:
Nombre de Usuario: oswaldo
y nos debería mostrar el mensaje de contraseña
correcta.
Con esto terminamos el formulario de inicio de sesión en tres (3)
capas en visual studio .net con SQL Server.
|