Jump to content

Login de com BD SQL


Go to solution Solved by williamjda,

Recommended Posts

Posted (edited)

Olá amigos bom dia.

Estou a desenvolver um aplicativo simples no vb que utiliza login de usuarios cadastrados no BD Sql.

Criei um Modulo com o seguinte código:

Imports System.Data.SqlClient
Imports System.Data
----------------------------------------------------
Module conexao
Public con As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BD_Dados\BD_dadosf.mdf;Integrated Security=True;User Instance=True")
End Module

E no botão login o seguinte:

Imports System.Data.SqlClient
Imports System.Data
-----------------------------------------------------
Public Class Login
Private Sub BT_login_Click(sender As System.Object, e As System.EventArgs) Handles BT_login.Click
 Dim cmd As SqlCommand
 Dim dr As SqlDataReader
 Try
	 con.Open()
	 cmd = New SqlCommand("Sesion", con)
	 cmd.CommandType = 4
	 With cmd.Parameters
		 .AddWithValue("@LoginUser", txtLoginUser.Text.ToString)
		 .AddWithValue("@SenhaUser", txtSenhaUser.Text.ToString)
	 End With
	 dr = cmd.ExecuteReader
	 If dr.HasRows = True Then
		 MsgBox("Bem vindo", vbInformation)
		 sistema.Visible = True
		 Me.Visible = False
	 Else
		 MsgBox("Dados Incorretos", vbInformation)
		 txtLoginUser.Text = ""
		 txtSenhaUser.Text = ""
		 txtLoginUser.Focus()
	 End If
 Catch ex As Exception : MsgBox(ex.Message)
 End Try
 con.Close()
End Sub

O problema é que quando eu clico no botão login aparece a seguinte mensagem abaixo:

( could not find stored procedure 'Sesion' )

Alguem poderia me ajudar a resolver isso, muito obrigado.

Edited by williamjda
geSHi
Posted

Experimenta mudares o

cmd = New SqlCommand("Sesion", con)

para

cmd = New SqlCommand("Select 1", con)

Só para ele fazer uma consulta qualquer e devolver algo... senao conseguir fazer este SELECT é porque não está a conseguir ligar

Posted (edited)

Olá amigo agora sim funcionou:

Porem como faço para que ele valide o usuario e senha. Pois quero que quando digitar o usuario e senha se estiver incorreto ele não acesse o sistema.

E se estiver certo ai sim ele acesse.

Edited by williamjda
Posted

A stored procedure dele não deve dar exception, depende de como a construiu.

E que tal criar uma função que retorne true ou false, dependendo se o login está válido ou não?

Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

  • 2 weeks later...
  • Solution
Posted (edited)

Amigo obrigado pela ajuda consegui fazer da seguinte maneira.

Private Sub BT_entrar_Click(sender As System.Object, e As System.EventArgs) Handles BT_entrar.Click
	conexao.ConnectionString = "Data Source=localhost;Initial Catalog=BDSOSPET;Integrated Security=True;User ID=sa;Password=senha"
	Try
		Dim cmd As New SqlCommand("SELECT * FROM Login WHERE Senha '" & txtSenha.Text & "'AND Senha = '" & txtLogin.Text & "'", conexao)
		conexao.Open()
		Dim dr As SqlDataReader = cmd.ExecuteReader()
		If (dr.Read() = True) Then
			txtLogin = txtSenha
			MessageBox.Show("Bem-Vindo " & txtLogin.Text)
			Me.Hide()
			SOSPET.ShowDialog()
		Else
			MessageBox.Show("Usuario e/ou Senha Invalido!!!")
			txtLogin.Clear()
			txtSenha.Clear()
			txtLogin.Focus()
		End If
		conexao.Close()
	Catch ex As Exception
		MessageBox.Show(ex.Message)
	End Try
End Sub
Edited by williamjda
Posted

Ainda bem 😉 Já agora se calhar a senha da tua BD é que devias por fora do código... senão cada vez que ela mudar tens de ir ao código mudá-la...

conexao.ConnectionString = "Data Source=localhost;Initial Catalog=BDSOSPET;Integrated Security=True;User ID=sa;Password=senha"

Podias criar uma setting para isso por exemplo...

Posted

o tipo de comando deve ser texto

.ComandType= ComandType.Text

Eu te passo o código que funciona:

'se o usuário ou a senha estiverem vazios avisa o usuário
    If txtUsuario.Text.Trim = String.Empty Then
	    MsgBox("Preencha o campo com o nome do usuário.", MsgBoxStyle.Information, "Informação Incompleta")
	    Me.txtUsuario.Focus() : Return
    End If
    If txtSenha.Text.Trim = String.Empty Then
	    MsgBox("Preencha o campo com a sua senha de entrada.", MsgBoxStyle.Information, "Informação incompleta")
	    Me.txtSenha.Focus() : Return
    End If
    strSQL = "SELECT * FROM vUsuario WHERE [user]='" & txtUsuario.Text.Trim & "' "
    'define um comando sobe a conexão para selecionar o usuario e a senha
    'cria um objeto datareader e uma função que retorna o leitor (Reader)

    Dim leitor as SQlClient.DataReader = ExecutarBuscarLeitor(strSQL)
    'define variaveis de controle
    Dim entrou As Boolean = False, Flag As Boolean = False
    Try
	    'se houver dados retornados
	    If leitor.HasRows Then
		    'percorre o datareader
		    Dim decifrado As New BLLclsCrypto()
		    While leitor.Read
			    'se o Hash da senha informada for igual ao hash armazenado no banco de dados define
			    'a variavel valido como True
			    If txtSenha.Text = leitor.Item("Senha") Then
				    Try : permissoes(leitor.Item("Tipo").ToString)
					    My.Forms.frmMenu.lblUser.Text = leitor("nome").ToString
				    Catch ex As Exception
					    MsgBox("Detalhes de erro ao acessar o sistema:" & vbNewLine & ex.Message, "Mensagem de Erro")
				    End Try
				    entrou = True 'acesso realizado com sucesso
				    If leitor("log").ToString = "0" Then
					    My.Forms.frmAlteraSenha.txtNAgente.Text = leitor("nAgente").ToString
					    My.Forms.frmAlteraSenha.txtNome.Text = leitor("nome").ToString
					    My.Forms.frmAlteraSenha.txtUser.Text = leitor("user").ToString
					    Me.Hide()
					    My.Forms.frmAlteraSenha.ShowDialog()
					    Exit Sub
				    End If
			    End If
		    End While
		    leitor.Close()
		    Flag = True 'define a variavel controle Flag como true
	    End If
	    iConta += 1 'incrementa o contador de tentativas
	    'se a senha é valida exibe o formulário principal
	    Me.Text = "Login - Tentativa " & iConta.ToString
	    If entrou Then
		    Me.Hide()
		    frmMain.ShowDialog()
		    MsgBox("yyy")
		    Me.Close()
	    ElseIf iConta = 3 Then 'se o numero de tentativas for maior que 3 então avisa ao usuário
		    disparaAlarme()
		    mensagem("Erro", "Você ultrapassou o número de tentativas. Contate o suporte!. Número de tentativas ultrapassado.")
		    Me.Close()
	    ElseIf Flag = False Then 'se Flag for false então o usuário é inválido
		    mensagem("Erro", "Nome de usuário Inválido. Tente novamente! ")
		    Me.txtUsuario.Focus() : Me.txtUsuario.Text = "" : Me.txtSenha.Text = ""
	    Else 'senha inválida
		    mensagem("Erro", "Senha Inválida. Tente novamente!")
		    Me.txtSenha.Focus() : Me.txtSenha.Text = ""
	    End If
    Catch ex As Exception : mensagem("Ex", ex.Message, "ao fazer o Login...")
    End Try

Aqui está a função que retorna o Reader

Public Function ExecutarBuscarLeitor(ByVal StrSQL As String, Optional ByVal Parametro As String = "") As SqlDataReader
	    If Not AbrirConexao() Then
		    Return Nothing
		    Exit Function
	    End If
	    comando = New SqlCommand
	    With comando
		    .Connection = conexao
		    .CommandType = CommandType.Text
		    .CommandText = StrSQL
		    .Parameters.Add(New SqlParameter("@Parametro", SqlDbType.VarChar, 200))
		    .Parameters("@Parametro").Value = Parametro & "%"
	    End With
	    If Not trans Then
		    ExecutarBuscarLeitor = comando.ExecuteReader
	    Else
		    comando.Transaction = transacao
		    ExecutarBuscarLeitor = comando.ExecuteReader
	    End If
	 End Function

mas pode ignorar as transções se vc ñ precisa

Pode abrir a conexão de uma outra maneira

Function AbrirConexao() As Boolean
	   Try
		    conexao = New SqlConnection(strConexao)
		    If conexao.State = ConnectionState.Closed Then
			    conexao.Open()
			    Return True
		    Else
			    Return False
		    End If
	    Catch acesso As SqlException
		    MsgBox("Detalhes de erro ao acessar a base de dados indicada:", vbNewLine & acesso.Message, "Mensagem de Erro")
		    Return False
	    Catch ex As Exception
		    MsgBox("Mensagem de erro ao abrir a conexão com a base de dados:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Erro ao abrir a conexão")
		    Return False
	    End Try
    End Function

Desculpe a má documentação

Espero que ajude

@ pr@tic@ f@z o m&str&

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.