' Función para comprobar si el acceso es correcto
Private Function ComprobarUsuario(ByVal usuario As String, ByVal contrasena As String) As Boolean
' Conectar a la base de datos
Dim cnn As SqlConnection = Nothing
Try
cnn = New SqlConnection(Me.SqlDataSource1.ConnectionString)
cnn.Open()
' Definir la cadena que vamos a usar para comprobar
' si el usuario y el password son correctos.
' Utilizo parámetros para evitar inyección de código.
Dim sel As New System.Text.StringBuilder
' Usando COUNT(*) nos devuelve el total que coincide
' con lo indicado en el WHERE,
' por tanto, si la clave y el usuario son correctos,
' devolverá 1, sino, devolverá 0
sel.Append("SELECT COUNT(*) FROM Empleados ")
sel.Append("WHERE usuario = @usuario AND contrasena = @contrasena")
' Definir el comando que vamos a ejecutar
Dim cmd As New SqlCommand(sel.ToString, cnn)
' Creamos los parámetros
cmd.Parameters.Add("@usuario", SqlDbType.NVarChar, 16)
cmd.Parameters.Add("@contrasena", SqlDbType.NVarChar, 16)
' Asignamos los valores recibidos como parámetro
cmd.Parameters("@usuario").Value = usuario
cmd.Parameters("@contrasena").Value = contrasena
' Ejecutamos la consulta
' ExecuteScalar devuelve la primera columna de la primera fila
' por tanto, devolverá el número de coincidencias halladas,
' que si es 1, quiere decir que el usuario y el password son correctos.
Dim t As Integer = CInt(cmd.ExecuteScalar)
' Cerramos la conexión
cnn.Close()
' Si el valor devuelto es cero
' es que no es correcto.
If t = 0 Then
Return False
End If
'Capturamos una excepcion por si hay error en la conexion
Catch ex As Exception
lblError.Text = "Error " & ex.Message
Return False
Finally
'Si la conexion esta cerrada, la destruimos
If Not cnn Is Nothing Then
cnn.Dispose()
End If
End Try
' Si llega aquí es que todo ha ido bien
Return True
End Function