Buen día, quiza ya sea un poco tarde pero este mismo ejemplo me sirvio para poder terminar la validación en mi proyecto por eso me anime a postear la conexión y la validación de usuario echa en un Proyeto en 3 capas y una mas de Entidad, mi proyecto utiliza "Procedimientos Almacenados" para validar el usuario y la contraseña, reciben 2 parametros y regresa 1
la verción que estoy utilizando es 2010 y el servidor SQL 2008
Antes que nada quiero Aclarar que soy un novato y me estoy enseñando a programar, espero no romper las reglas del foro ya que es la primera vez que posteo algo y no estoy familiarizado con esto al 100% quiza mis terminos no sean los mas correctos asi que acepto criticas constructivas
bien. Empecemos!
Primero creamos nuestros procedimientos almacenados
CREATE proc validarSuper
@USER VARCHAR(50),
@pass VARCHAR(50),
@Respuesta INT output
AS
DECLARE @usuario VARCHAR(50)
DECLARE @passw VARCHAR(50)
BEGIN
SELECT @usuario=strNombreSuper, @passw=strPasword
FROM TabConfiguracion
WHERE strNombreSuper = @USER AND @pass = strPasword
IF ((@USER = @usuario) AND (@pass = @passw))
BEGIN
SET @Respuesta = 1
END
ELSE
BEGIN
print 'El usuario ó contraseña es Incorrecto'
SET @Respuesta = 0
END
RETURN @Respuesta
END
CREATE proc validarUsuario
@USER VARCHAR(50),
@pass VARCHAR(50),
@Respuesta INT output
AS
DECLARE @usuario VARCHAR(50)
DECLARE @passw VARCHAR(50)
BEGIN
SELECT @usuario=shtUsuNombreUsuario, @passw=shtUsuPasword
FROM CatUsuarios
WHERE shtUsuNombreUsuario = @USER AND shtUsuPasword = @pass
IF ((@USER = @usuario) AND (@pass = @passw))
BEGIN
print 'El Usuario es correcto'
SET @Respuesta = 1
END
ELSE
BEGIN
print 'El usuario ó contraseña es Incorrecto'
SET @Respuesta = 0
END
RETURN @Respuesta
END
Una vez creados llenamos algunos registros para hacer las pruebas de ejecucion
DECLARE @resultado INT
EXEC validarSuper 'SuperDuper','Contraseña',@resultado output
print @resultado
Bien esto solo es un tip en caso de que no sepas como ejecutar un procedimiento despues de crearlo en SQL, pasemos al codigo de Visual Basic
Esta es la clase de LoginForm1 dentro de la capa grafica e importa las capas de Negocio y Entidad
Imports Entidad
Imports Negocio
Public Class LoginForm1
Public Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Dim _login As New entidadLogin 'creo una instancia de la clase entidadLogin dentro de la capa Entidad
'Le paso los valores de usuario y contraseña
_login.usuario = UsernameTextBox.Text
_login.pasword = PasswordTextBox.Text
Dim validar As New valUsuario 'Creo una instancia de la clase valUsuario, dentro de la capa Negocio
'Aqui uso el metodo "validarUser" y le paso el objeto que lleva los parametros se usuario y contraseña
If validar.validarUser(_login) Then
'Si es verdadero muestra el usuario
MsgBox(_login.usuario)
Else
MsgBox("Estas Chiflado Tio")
End If
Me.Close()
End Sub
' Este es el boton de cerrar
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
Me.Close()
End Sub
End Class
Esta es la clase de entidadLogin, me sirve espesificamente para pasar valores de una clase a otra
Public Class entidadLogin
' Esta clase solo la utilizo para pasar los valores entre las 3 Capas
'Todas la Clases tienen esta referencia ó estan referenciadas a esta clase no se como llamarle
Dim user, pass As String
Public Property usuario
Get
Return user
End Get
Set(value)
user = value
End Set
End Property
Public Property pasword
Get
Return pass
End Get
Set(value)
pass = value
End Set
End Property
Sub New()
' TODO: Complete member initialization
End Sub
'Constructor
Public Sub New(ByVal usuario As String, pass As String)
user = usuario
pasword = pass
End Sub
End Class
Esta clase es valUsuario de la capa de Negocio e importa la capa de Datos
Imports Datos
'Esta clase esta dentro de la capa de Negocio y tiene el metodo "validarUser" que recibe un objeto de tipo Entidad.entidadLogin de la capa Entidad
Public Class valUsuario
Dim _acceso As New Acceso'Creo una instancia de la clase Acceso, dentro de la Capa Datos
Public Function validarUser(login As Entidad.entidadLogin)
If login.usuario.ToString = "SuperDuper" Then 'Si el usuario es "SuperDuper" Entonces
If _acceso.superAcceso(login) Then 'Ejecuta el metodo "superAcceso" de la clase Acceso para validar el usuario
MsgBox(login.usuario)
' Esto esta pendiente No lo tomes en cuenta
Else 'Si la contraseña no es correcta entonces
MsgBox("Contraseña incorrecta")
End If
Else 'Si el usuario no es "SuperDuper" entonces es un usuario común
MsgBox("El usuario es un mortal")
'Uso otro metodo de la clase Acdeso para validar a los usuarios mortales
If _acceso.accesoUsuario(login) Then' Si el usuario es verdadero Entonces..
MsgBox("Correcto")
Return True
Else'Si no es verdadero Entonces..
MsgBox("Incorrecto")
Return False
End If
End If
Return login
End Function
End Class
Esta otra es la Clase de Acceso dentro de la Capa de Datos
Imports System.Data.SqlClient
'Clase Acceso. Contiene 2 metodos, 1 es para validar al SuperUsuario y el otro es pra validar a los mortales
Public Class Acceso
Dim cnn As New Conexion 'Esta es la clase de conexión dentro de la capa de Datos
Dim cmd As New SqlClient.SqlCommand'Este objeto me sirve para enviar la consulta a la base de datos
Dim Resultado As Integer 'Valor de resultado en consulta
Public Function superAcceso(_login As Entidad.entidadLogin)
Try
cmd.Connection = cnn.conectar 'Me conecto y le asigno la conexión al objeto cmd
cmd.CommandText = "ValidarSuper" ' Este es el nombre del Procedimiento almacenado
cmd.CommandType = System.Data.CommandType.StoredProcedure 'Le indico que el comando es un Prodecimiento almacenado
cmd.Parameters.AddWithValue("@user", _login.usuario.ToString)'le paso el valor de usuario del procedimiento almacenado
cmd.Parameters.AddWithValue("@pass", _login.pasword.ToString)'le paso el valor de pasword del procedimiento almacenado
cmd.Parameters.Add(New SqlParameter("@Respuesta", SqlDbType.Int))'le digo cual sera el parametro de regreso
cmd.Parameters("@Respuesta").Direction = ParameterDirection.Output'le asigno la direccion del parametro
cmd.ExecuteNonQuery()'Ejecuto el procedimiento
Resultado = cmd.Parameters("@Respuesta").Value.ToString'Recibo el Resultado
If Resultado = 1 Then
Return True
Else
Return False
End If
Catch ex As Exception
MsgBox(ex)
End Try
Return True
End Function
Public Function accesoUsuario(_login As Entidad.entidadLogin)
Try
cmd.Connection = cnn.conectar
cmd.CommandText = "validarUsuario"
cmd.CommandType = System.Data.CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@user", _login.usuario.ToString)
cmd.Parameters.AddWithValue("@pass", _login.pasword.ToString)
cmd.Parameters.Add(New SqlParameter("@Respuesta", SqlDbType.Int))
cmd.Parameters("@Respuesta").Direction = ParameterDirection.Output
cmd.ExecuteNonQuery()
Resultado = cmd.Parameters("@Respuesta").Value.ToString
If Resultado = 1 Then
Return True
Else
Return False
End If
Catch ex As Exception
MsgBox(ex)
End Try
Return True
End Function
End Class
Y esta ultima clase es la de conexión que tambien se encuentra dentro de la capa de Datos
Imports System.Data.SqlClient
'Esta es la Clase conexión
Public Class Conexion
Dim cnn As SqlConnection
Public Function conectar()
Dim Servidor As String = "ZARAK-PC\SQLEXPRESS"
Dim BaseDatos As String = "BDTiempo"
Dim CadenaConexion As String = "Data Source =" & Servidor & ";Initial Catalog=" & BaseDatos & ";Integrated Security=SSPI;"
Try
cnn = New SqlConnection(CadenaConexion)
cnn.Open()
Return cnn
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function
Public Function desconectar()
Try
If cnn.State = ConnectionState.Open Then
cnn.Close()
Return True
Else
Return False
End If
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function
End Class
Espero sea claro y le pueda servir a alguien
************
Tansolo soy un humilde campesino que ha caido en desgracia y quiere compartir algo