Buenas a todos, queria consultar como obtener y luevo validar un dato desde una tabla en sql server.
Tengo un formulario con dos textbox (usuario y contraseña) la idea es q al presionar un boton los valores ingresados en los textbox se verifiquen en la tabla del sql, y que dependiendo si estan o no, que aparezca un messagebox "usuario existente" o "usuario inexistente"
Hasta ahora tengo esto, el problema es q no encuentro la manera de validar los datos q pongo en los textbox, si alguien con mas conocimientos me da una mano, se lo agradezco :D
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Usuario As String
Dim con As SqlConnection
Dim conexion As String = "data source = PABLO-PC; initial catalog= Tabla_Prueba; integrated security=yes"
con = New SqlConnection(conexion)
Dim com As New SqlCommand
Dim Valor As Object
com.CommandText = String.Format("SELECT * from Usuarios where Usuario = {0} and Contraseña = {1}", TextBox1.Text, TextBox2.Text)
com.CommandType = CommandType.Text
com.Connection = con
con.Open()
Valor = com.CommandText
MessageBox.Show(Valor)
If TextBox1.Text = Valor Then
MessageBox.Show("Bienvenido " & TextBox1.Text)
ElseIf TextBox1.Text <> Valor Then
MessageBox.Show("La contraseña o el nombre de usuario no son validos")
End If
con.Close()
End Sub
Basicamente mi problema es q no encuentro el comando correcto para hacer las comparaciones entre el valor obtenido de la base de datos y el valor ingresado en el textbox, ya probe utilizando executescalar para identificar el valor de forma numerica, pero al tener string.forma para poder asignar valores a la busqueda me da error.
Gracias de antemano :D
Pues una forma que se me ocurre es que hagas un select del usuario y la contraseña, y lo almacences el resultado de la búsqueda en un dataTable. si te devuelve una fila esque el usuario existe, entonces muestras el mensaje en pantalla e inicias el programa.. Algo así: (te lo pongo en c# que es en lo que yo programo pero en vb es igual, poniendo tu nomenclatura)
String sentenciaSql = "select login, pass from usuario where login = '" + login + "' AND pass = '" + password + "'";
SqlConnection conexion = null;
try
{
conexion
= new SqlConnection
(cadena_conexion
); SqlDataAdapter adapter
= new SqlDataAdapter
(sentenciaSql, conexion
);
DataTable tabla
= new DataTable
(); conexion.Open();
adapter.Fill(tabla);
if (tabla.Rows.Count == 1)
{
exito = true;
}
else
{
exito = false;
}
}
....
Yo lo tengo así en mi aplicación pero se podrá de más maneras...
Salu2.
Lo que te han dicho antes, con que la consulta devuelta venga vacía ya alcanza, la comparación la ejecuta el sql al realizar la consulta.
Saludos
Gracias, ahora mismo me pongo a probar a ver que sale!
saludos
Edit: Pongo el codigo en VB.net por si a alguien le puede llegar a servir, muchas gracias por la ayuda :D
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim con As SqlConnection
Dim conexion As String = "data source = PABLO-PC; initial catalog= Umbrella; integrated security=yes"
con = New SqlConnection(conexion)
Dim com As SqlCommand
Dim buscar As String = "SELECT * from Usuarios where Usuario = '" & TextBox1.Text & "' and Contraseña = '" & TextBox2.Text & "'"
com = New SqlCommand(buscar, con)
Dim Adapter As SqlDataAdapter = New SqlDataAdapter(buscar, con)
Dim tabla_temp As DataTable = New DataTable
con.Open()
Adapter.Fill(tabla_temp)
If tabla.Rows.Count = 1 Then
MessageBox.Show("Bienvenido " & TextBox1.Text)
ElseIf tabla.Rows.Count = 0 Then
MessageBox.Show("La contraseña o el nombre de usuario no son validos")
End If
con.Close()
End Sub
PD: Solo de curioso y para aprender mas, si algiuen sabe otro metodo y tiene ganas de compartirlo, bienvenido sea :P
saludos
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