Jump to content

Try catch função


pmaster
 Share

Recommended Posts

Boa tarde a todos.

Sou novo aqui no C# se disser algo incorrecto agradeço que me corrijam  🙂

O meu problema seguinte: eu tenho a seguinte função:

public static SqlDataReader leitura_reader(string query)
        {

            SqlDataReader reader ;
            try
            {
                using (SqlConnection connection = new SqlConnection("Data Source=BRUNO-PC\\SQLEXPRESS ;Initial Catalog='" + _base_dados + "' ;Integrated Security=True"))
                {
                    SqlCommand command = new SqlCommand(query, connection);
                    connection.Open();
                     reader = command.ExecuteReader();

                   
                    reader.Close();
                }
            }
            catch
            {
                
                ferramentas.messagebox("asdasd");
            }
            return reader;
         }

Agora o problema é o return, que não sei onde o colocar.. Se eu o colocar dentro do try, da-me erro a dizer que a função pode não retornar nada ou não vai retornar nada. Já tentei de varias maneiras e não chego a uma conclusão correcta.

Alguém tem alguma ideia ?

Obrigado 😛

Link to comment
Share on other sites

o return reader deve estar dentro do try, o bloco try tem a sequencia normal do código no caso em que tudo corre conforme esperado.

Caso ocorra uma situação excepcional, que é apanhada pelo teu catch deves decidir o que fazer a seguir, lançar a excepção outra vez, mas com mais informção importante ou retornar null, o q achares melhor para o contexto da tua aplicação.

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Ele dá erro do try, porque se existe um erro antes do return, a execução "salta" para o bloco do catch, e não executa o return. Acho que como tens aí é uma forma correcta. Depois tens de verificar se o resultado que obtens é ou não null.

Outra forma, que eu prefiro usar, é atirar as excepções para fora, e tratá-las lá fora, mas depende muito do contexto. Por exemplo, se o local onde chamas essa função leitura_reader nada tem a ver com sqlreaders et al (ou seja, está numa "camada" diferente), então não te recomendo a usar esta minha última sugestão.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

@bruno1234

Sim eu entendi o conceito, mas mesmo com o return dentro do bloco try, acusa-me o seguinte erro:

" leitura_reader(string)': not all code paths return a value "

@softclean

Eu tive o cuidado de testar sem o try e de facto é me retornado o que eu queria, não dá erro nem retorna null.

Eu não entendi esse método de tratamento de erro que falas te, podias explicar melhor se faz favor ? É que este trecho de código de facto está numa classe aparte, como referiste que seria o mais indicado quando está numa "camada" diferente.

Obrigado 🙂

Link to comment
Share on other sites

O método que te sugeri foi atirares as excepções em vez de as tratares com um try. Eu acho que isso deve ficar ao critério de cada um. Já ouvi dizer que não é correcto, mas eu acho que deves fazer como bem entenderes. Basicamente:

Tratar erro dentro da função:

+ simplifica o código externo da aplicação

- fora da função, é difícil saber que tipo de erro deu exactamente (a não ser que inventes, códigos de erro, ou um sistema para ir guardando os erros)

Tratar o erro fora da função (a função simplesmente atira a excepção)

+ Tens informação do que errou exactamente na execução, e podes tratar esse erro de forma personalizada (por exemplo, erros de base de dados inacessível ou password errada podem ter diferentes tipos de resolução por parte do utilizador)

- Expõe alguns detalhes para fora da função que podem não ser desejáveis tratar.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

@bruno1234 Resolves te o meu problema com o return null  😛

Não me passou que desse assim obrigado  🙂

@softclean o método que estas a sugerir é o throw ? Pela excelente explicação que me deste prefiro realmente fazer o tratamento fora da função

Testarei com mais atenção amanha e posto aqui a minha solução, obrigado 😛

Link to comment
Share on other sites

Acho que não entendi, mas de facto não vou acrescentar mais nada à acepção além da mensagem de erro.

Eu uso o try para que no meio da utilização, ele não me estoure com um erro na query ou algo do género.

Achas que neste caso não é preciso um try ?

Obrigado pela ajuda 🙂

Link to comment
Share on other sites

É como o bruno1234 disse, para tratares a excepção fora da função, basta simplesmente não colocar nada (porque se a excepção não é tratada na função, ela vai ser atirada automaticamente para o bloco que chamou essa função).

Fora da função, basta colocares o try. Tudo depende do local onde queres tratar os erros, o que te sugerimos foram apenas alternativas, agora resta-te escolher uma delas, a que achares melhor para o teu caso. 😄

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

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
 Share

×
×
  • 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.