Jump to content

Boas Práticas de Acesso a uma Base de Dados


Recommended Posts

Olá a todos!

Já faço desenvolvimento em VB.NET a algum tempo. Embora tenha tido programação na escola (Pascal, C++ e VB6) acabei por alguns anos depois do ambiente escolar por migrar para esta nova linguagem de uma forma auto didática pelo que em algumas vezes julgo que poderei não estar a adotar as melhores práticas na realização de uma determinada Acão.

No caso em concreto que apresento hoje aqui tem haver com a forma de acessos a Bases de Dados, no meu caso específico a Bases de Dados Microsoft SQL Server.

Em todas as aplicações que desenvolvo e que necessitam acesso a uma base de dados, faço através da criação de algumas variáveis e instanciação de alguns objectos num módulo de forma a ficar visível em todo o projeto. Estas variáveis são:

  • mssql_cn (SqlClient.SqlConnection) -> Guarda a String de ligação ao Servidor MSSQL
  • mssql_db (String) -> Define a Base de Dados a usar
  • mssql_cmd (SqlClient.SqlCommand) -> Objeto em que defino e executo uma determinada query
  • mssql_dr (SqlClient.SqlDataReader) -> Objecto que recebe o resultado do mssql_cmd, caso este seja um "Select"

Abaixo um exemplo de que forma faço uma query através deste modelo:

Try
            If Not mssql_cn.State = ConnectionState.Open Then mssql_cn.Open()
            mssql_cmd.Connection = mssql_cn ' Só executo esta linha uma única vez em toda a aplicação

            If Not mssql_cmd.Connection.State = ConnectionState.Open Then mssql_cmd.Connection.Open()

            mssql_cmd.Parameters.Clear()

            mssql_cmd.CommandText = "SELECT ref, nome, morada FROM Clientes Where ref = @Ref"

            mssql_cmd.Parameters.Add("@Ref", SqlDbType.NVarChar).Value = txt_ref.text

            mssql_dr = mssql_cmd.ExecuteReader

            If mssql_dr.HasRows Then
                While mssql_dr.Read
                    datagridview1.rows.add(mssql_dr(0), mssql_dr(1))
                End While
            Else
                MsgBox("Não foi encontrado registos", MsgBoxStyle.Exclamation)
            End If

        Catch ex As Exception
            MsgBox(ex.ToString, MsgBoxStyle.Critical)

        Finally
            mssql_dr.Close()
            mssql_cmd.Parameters.Clear()
            mssql_cmd.Connection.Close()
            mssql_cn.Close()
        End Try

Com base no código acima, gostaria de ter a vossa opinião sobre defeitos e más práticas que possam existir e de que forma poderei melhorar ou reformular por completo este código.

Sei que há outras alternativas como o Linq e DataTables, gostaria de saber a vossa opinião.

Obrigado desde de já a todos!

Link to post
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
×
×
  • 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.