• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skcratch

[Ajuda] - métodos de criação e fecho de ligações à base de dados

7 mensagens neste tópico

Viva!

Neste momento, estou a criar um conjunto de métodos o mais genéricos possíveis e que estão a ser adicionados a uma classe C# para posterior utilização num ASP .NET Web Site. Os métodos são públicos e estáticos, para assim poderem ser invocados a partir de qualquer Web Form existente no projecto.

O código que tenho até ao momento, é o seguinte:

        // criar a ligação à base de dados
        public static SqlConnection criarLigacao(string connectionString)
        {
            return (new SqlConnection(connectionString));
        }

        // fechar as ligações à base de dados e libertar os recursos associados ao SqlCommand e SqlReader
        public static void fecharLigacao(SqlConnection sqlConnection, SqlCommand sqlCommand,
            SqlDataReader sqlReader)
        {
            sqlReader.Close();
            sqlReader.Dispose();
            sqlCommand.Dispose();

            if (sqlConnection.State == ConnectionState.Open)
            {
                sqlConnection.Close();
                sqlConnection.Dispose();
            }
        }

Neste momento, a minha principal dúvida é a instanciação de uma nova SqlConnectionporque creio que a instanciação pode devolver null. Que sugestões fazem? E em relação ao outro método?

Grato desde já pelos comentários!

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Caro skratch,

As várias classes que colaboram no ADO.NET implementam IDisposable. Dessa forma pode substituir o método fechar ligação pela convenção de utilizar todas as instâncias de SqlConnection, SqlCommand e SqlDataReader em blocos de using.

Pela descrição, sugiro que dê uma leitura no pattern "Open Session in View" que lhe permite encapsular completamente o ciclo de vida da SqlConnection num ambiente Request-Response como o ASP.NET.

Cumprimentos

Sérgio Costa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Anteriormente, já me deparei com a utilização dos blocos de using em alguns exemplos. No entanto, a parte de controlo de excepções ainda não está totalmente implementada; caso pretenda usar um logger, por exemplo, os blocos using não impedem/condicionam a sua utilização?

Grato desde já pela ajuda,

Cumps!

B)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, o using n impede em nada o teu sistema de logs.

Até pq o using só te te faz o dispose dos recursos no fim, não te protege contra excepções... no teu catch é q fazes o log do erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Neste caso, nos métodos de Dispose() e Close() dos recursos, não estou a pensar criar nenhuma entrada no logger (consideram má prática?). Aquilo que neste momento pretendo, é criar métodos genéricos como os anteriormente descritos para executar Stored Procedures, ExecuteScalar,... com o intuito de realizar uma gestão de erros mais simplificada e estruturada das operações com a base de dados da web application.

Grato desde já pela ajuda,

Cumps!

B)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu é q sabes o q tens necessidade de guardar log. Guardar o log dos erros pode ser suficiente, a não ser q queiras ter algum sistema de back office para consultares os logs mm qd as operações correm bem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Em princípio, serão apenas armazenados os logs dos erros que possam ocorrer durante a utilização da web application.

Grato desde já pela ajuda e comentários,

Cumps!

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora