none
Erro Mysql RRS feed

  • Pergunta

  • Estou fazendo um login com nivel de acesso(admin e padrao), mas esta dando erro quando tento logar como padrao

    'Not allowed to change the 'ConnectionString' property while the connection (state=Open)'

    'Não é permitido alterar a propriedade' ConnectionString 'enquanto a conexão (estado = Abrir)'

    Esse é o codigo

    Imports MySql.Data.MySqlClient
    Imports Cadastro.Criptografia
    Public Class Login
    
        ' TODO: Inserir código para realizar autenticação personalizada utilizando o nome de usuário e senha fornecidos 
        ' (Consulte https://go.microsoft.com/fwlink/?LinkId=35339).  
        ' A entidade de segurança personalizada pode ser anexada à entidade de segurança da thread atual da seguinte forma: 
        '     My.User.CurrentPrincipal = CustomPrincipal
        ' onde CustomPrincipal é a implementação de IPrincipal usada para realizar a autenticação. 
        ' Subsequentemente, My.User irá retornar informações de identificação encapsuladas num objeto CustomPrincipal
        ' como nome de usuário, nome de exibição etc.
    
        Dim con As New MySqlConnection
        Dim cmd, cmd1 As New MySqlCommand
        Dim read As MySqlDataReader
        Dim tentativas As Integer
        Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btok.Click
            If tblgin.Text.Trim = "" Then
                MessageBox.Show("Informe a seu login !", "Login", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                tblgin.Focus()
                Exit Sub
            End If
    
    
            If tblsenha.Text.Trim = "" Then
                MessageBox.Show("Informe a sua senha !", "Senha", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                tblsenha.Focus()
                Exit Sub
            End If
    
    
            If cbacesso.Text.Trim = "" Then
                MessageBox.Show("Selecione nivel de acesso: Admin ou Usuário !", "Nivel de acesso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                cbacesso.Focus()
                Exit Sub
            End If
        End Sub
    
    
    
        Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btcancel.Click
            Me.Close()
        End Sub
    
    
        Private Sub Login_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
            End
        End Sub
    
        Private Sub Login_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            con.ConnectionString = "server=localhost;user id=user;password=root;database=cadastro;" 'Erro acontece aqui
            cmd.Connection = con
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "Select * From administradores Where Usuario=@Usuario and Senha=@Senha"
    
            cmd1.Connection = con
            cmd1.CommandType = CommandType.Text
            cmd1.CommandText = "Select * From upadrao Where Usuario=@Usuario and Senha=@Senha"
        End Sub
    
        Private Sub verificaLogin()
    
            With read
                If .Read Then
                    MessageBox.Show("Acesso permitido ! Bem Vindo """ & tblgin.Text & """", "Login", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    If cbacesso.SelectedIndex = 0 Then
                        Me.Hide()
                        'Ponha seu formulario aqui
                        formularioAtual = New CadFuncionario()
                        formularioAtual.Show()
                    ElseIf cbacesso.SelectedIndex = 1 Then
                        Me.Hide()
                        'Ponha seu formulario aqui
                        formularioAtual = New Cadastro()
                        formularioAtual.Show()
                    End If
                Else
                    tentativas += 1
                    If tentativas >= 3 Then
                        MessageBox.Show("Número de tentativas foi excedido !", "Login", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        'Fecha aplicação
                        End
                    Else
                        tblgin.Clear()
                        tblsenha.Clear()
                        MessageBox.Show("Login ou senha inválida !", "Login", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    End If
                End If
    
                tblgin.Focus()
    
            End With
        End Sub
        Private Sub cbacesso_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbacesso.SelectedIndexChanged
    
            If cbacesso.SelectedIndex = 0 Then
                cmd.Parameters.Add("usuario", MySqlDbType.VarChar)
                cmd.Parameters.Add("senha", MySqlDbType.VarChar)
                cmd.Parameters("usuario").Value = tblgin.Text
                cmd.Parameters("Senha").Value = GetHash(tblsenha.Text)
                con.Open()
                read = cmd.ExecuteReader
                verificaLogin()
                con.Close()
            End If
    
            If cbacesso.SelectedIndex = 1 Then
                cmd1.Parameters.Add("usuario", MySqlDbType.VarChar)
                cmd1.Parameters.Add("Senha", MySqlDbType.VarChar)
                cmd1.Parameters("usuario").Value = tblgin.Text
                cmd1.Parameters("Senha").Value = GetHash(tblsenha.Text)
                con.Open()
                read = cmd1.ExecuteReader
                verificaLogin()
                con.Close()
            End If
        End Sub
    
        Private Sub tbsenha_KeyDown(ByVal eventSender As System.Object, ByVal eventArgs As KeyEventArgs) Handles tblsenha.KeyDown
            Dim KeyCode As Short = eventArgs.KeyCode
    
            If KeyCode = System.Windows.Forms.Keys.Return Then
                btok.Focus()
            End If
    
            If KeyCode = System.Windows.Forms.Keys.Escape Then
                End
            End If
        End Sub
    
        Private Sub Login_Closed(sender As Object, e As EventArgs) Handles Me.Closed
            End
        End Sub
    End Class

    Esse codigo esta com base em um exemplo de login do macoratti

    http://www.macoratti.net/vbn_log1.htm

    Mesmo que a conexão esteja sem close(no meu codigo), no exemplo tambem esta, eu testei o exemplo com mysql e funcionou certinho, quem poder me apontar o erro ou saber alguma solução agradeço desde ja 

    segunda-feira, 18 de dezembro de 2017 13:09

Respostas

  • Boa tarde, PedroHFAlmeida.

    Veja se esse link pode te ajudar:

    https://social.msdn.microsoft.com/Forums/en-US/66a3c7ff-1711-4999-a026-838b0621bd79/not-allowed-to-change-the-connectionstring-property-the-connections-current-state-is-open?forum=netfx64bit

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta PedroHFAlmeida quarta-feira, 20 de dezembro de 2017 12:06
    segunda-feira, 18 de dezembro de 2017 19:41
    Moderador
  • Boa tarde.

    Veja se te ajuda, para comparação:

     Public Shared Function Consulta_Login(ByVal Evento As Integer, ByVal Login As String, ByRef Senha As String, ByRef Status As String) As Integer
            Dim CONN As MySqlConnection
            CONN = New MySqlConnection(str_connectionstring)
            Dim CMD As MySqlCommand = CONN.CreateCommand
            Dim RD As MySqlDataReader
    
            Try
                CMD.Parameters.Add(New MySqlParameter("@evento", Evento))
                CMD.Parameters.Add(New MySqlParameter("@login", Login))
    
                CONN.Open()
                CMD.CommandText = "Select senha, status From operadores Where evento = @evento AND login = @login"
                RD = CMD.ExecuteReader
                If RD.HasRows Then 'operador cadastrado
                    RD.Read()
                    Senha = RD("senha").ToString
                    Status = RD("status").ToString
                    Consulta_Login = 1
                Else 'operador não cadastrado
                    Consulta_Login = 0
                End If
                RD.Close()
                CONN.Close()
            Catch
                Consulta_Login = -1
                If CONN.State = 1 Then CONN.Close()
            End Try
        End Function


    MARIANO1776

    • Marcado como Resposta PedroHFAlmeida quarta-feira, 20 de dezembro de 2017 12:06
    segunda-feira, 18 de dezembro de 2017 21:03

Todas as Respostas

  • Boa tarde, PedroHFAlmeida.

    Veja se esse link pode te ajudar:

    https://social.msdn.microsoft.com/Forums/en-US/66a3c7ff-1711-4999-a026-838b0621bd79/not-allowed-to-change-the-connectionstring-property-the-connections-current-state-is-open?forum=netfx64bit

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta PedroHFAlmeida quarta-feira, 20 de dezembro de 2017 12:06
    segunda-feira, 18 de dezembro de 2017 19:41
    Moderador
  • Boa tarde.

    Veja se te ajuda, para comparação:

     Public Shared Function Consulta_Login(ByVal Evento As Integer, ByVal Login As String, ByRef Senha As String, ByRef Status As String) As Integer
            Dim CONN As MySqlConnection
            CONN = New MySqlConnection(str_connectionstring)
            Dim CMD As MySqlCommand = CONN.CreateCommand
            Dim RD As MySqlDataReader
    
            Try
                CMD.Parameters.Add(New MySqlParameter("@evento", Evento))
                CMD.Parameters.Add(New MySqlParameter("@login", Login))
    
                CONN.Open()
                CMD.CommandText = "Select senha, status From operadores Where evento = @evento AND login = @login"
                RD = CMD.ExecuteReader
                If RD.HasRows Then 'operador cadastrado
                    RD.Read()
                    Senha = RD("senha").ToString
                    Status = RD("status").ToString
                    Consulta_Login = 1
                Else 'operador não cadastrado
                    Consulta_Login = 0
                End If
                RD.Close()
                CONN.Close()
            Catch
                Consulta_Login = -1
                If CONN.State = 1 Then CONN.Close()
            End Try
        End Function


    MARIANO1776

    • Marcado como Resposta PedroHFAlmeida quarta-feira, 20 de dezembro de 2017 12:06
    segunda-feira, 18 de dezembro de 2017 21:03
  • Obrigado Filipe e Mariano por responderem, o erro estava em outro form, ele tinha um showdialog, mas o exemplos que vocês mandaram ajudaram a deixar meu código mais dinâmico 

    Att

    quarta-feira, 20 de dezembro de 2017 12:10