none
Função que retorna uma array - Como capturar os índices? RRS feed

  • Pergunta

  • Olá amigos do Forum, mais uma vez solicito a ajuda de vocês.
    Possuo a seguinte função:
        Public Function ConfirmarSenha(ByVal pNome As String) As Array
    
            Dim usuario(2) As String
            Dim con As New SqlConnection(My.Settings.conexao)
            Dim sql As String = "SELECT Nome, Senha, Nivel FROM ConsultaPermissoes WHERE Nome ='" & pNome & "'"
            Dim Dr As SqlDataReader
            Dim cmd As New SqlCommand(sql, con)
            con.Open()
            Dr = cmd.ExecuteReader
    
            'Se encontrar linhas então captura
            If Dr.HasRows Then
    
                If Dr.Read() Then
                    usuario(0) = Dr.Item("Nome").ToString
                    usuario(1) = Dr.Item("Senha").ToString
                    usuario(2) = Dr.Item("Nivel")
                End If
    
            End If
    
            Return usuario
            Dr.Close()
            cmd.Dispose()
            con.Close()
    
        End Function
    

     

    Depois estou capturando os dados retornados da seguinte forma:

        Private Sub BtnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOK.Click
    
            Dim resultado(2) As String
            Dim liberar As New Cls_Permissoes
            resultado(0) = liberar.ConfirmarSenha(Me.txtusuario.Text)(0)
            resultado(1) = liberar.ConfirmarSenha(Me.txtusuario.Text)(1)
            resultado(2) = liberar.ConfirmarSenha(Me.txtusuario.Text)(2)
    
            'etc....
            'O reestante não vem ao caso
    
        End Sub
    

    Minha pergunta é:

    Essa é a forma correta de se obter os valores da array.
    Apesar de funcionar não me parece boa pratica pois estou executando a mesma função 3 vezes
    Qual é a forma correta? 

    Obrigado pela atenção...

    sexta-feira, 15 de janeiro de 2010 15:03

Respostas

  • Está quase certo, mas tem algumas coisas a considerar.


        Public Function ConfirmarSenha(ByVal pNome As String) As Array
    
         try
            Dim usuario(2) As String
            Dim con As New SqlConnection(My.Settings.conexao)
            Dim sql As String = "SELECT Nome, Senha, Nivel FROM ConsultaPermissoes WHERE Nome ='" & pNome & "'"
            Dim Dr As SqlDataReader
            Dim cmd As New SqlCommand(sql, con)
            con.Open()
            Dr = cmd.ExecuteReader
    
            'Se encontrar linhas então captura
            'If Dr.HasRows Then  Pode retirar este if, já esta verificando
    se existe dados na linha de baixo.
    
                If Dr.Read() Then
                    usuario(0) = Dr.Item("Nome").ToString
                    usuario(1) = Dr.Item("Senha").ToString
                    usuario(2) = Dr.Item("Nivel")
                End If
    
            'End If
    
            Return usuario
          finally
            Dr.Close()    'Fechar conexão e liberar recursos sempre no 
    'finally, da maneira como esta antes a função retornava
    'e a conexão fica aberta.
            cmd.Dispose()
            con.Close()
          end try
        End Function
    

    E no local de chamar a função faz assim:

            Dim resultado(2) As String
            Dim liberar As New Cls_Permissoes
            Dim retorno = liberar.ConfirmarSenha(Me.txtusuario.Text)
            resultado(0) = retorno (0)
            resultado(1) = retorno (1)
            resultado(2) = retorno (2)
    
    Desta forma evita de chamar a função tres vezes.


    sexta-feira, 15 de janeiro de 2010 15:57