boas práticas de programação com ado.net vasco nunes safira consultadoria

Post on 17-Apr-2015

111 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Boas Práticas de Programação com ADO.NET

Vasco NunesVasco NunesSafira ConsultadoriaSafira Consultadoriahttp://www.safira.pthttp://www.safira.pt

Tópicos Como aceder de forma segura a dados

usando ADO.NET Como gerir excepções em ADO.NET Como implementar transacções Como desenvolver aplicações ADO.NET de

alta performance Técnicas de gestão de dados em ADO.NET Orientações no uso de Databound Controls Novas funcionalidades do ADO.NET 1.1

Pré-requisitosConhecimentos de Arquitectura do .NETConhecimentos de VB.NET ou C#Conhecimentos de conceitos de SGBDRConhecimentos de ADO e ADO.NET

Outra vez o ADO.NET?Já sabemos construir aplicações em

ADO & ADO.NET e queremos construir aplicações de alta performance

Queremos saber os principais benefícios das aplicações feitas com ADO.NET

Queremos usar o ADO.NET de uma forma optimizada

Demonstrações

Segurança em ADO.NET Tratamento de erros Tratamento de transacções Boas práticas de performance Paginação de dados Boas práticas de data-binding

Agenda Recomendações de Segurança na

utilização de ADO.NET no acesso a dados Recomendações no Tratamento de Erros Semântica de Transacções em ADO.NET Boas práticas de Performance Paginação de dados em ADO.NET Boas práticas usando Databound

Controls ADO.NET 1.1: Novas funcionalidades

Autenticação Windows® vs. Autenticação SQL Segurança é gerida mais facilmente Usernames e passwords não são

necessários nas connection strings Maior segurança no login

Gestão de Passwords: períodos de expiração, comprimentos mínimos, bloqueio de contas depois de múltiplos logins inválidos

Passwords não são enviadas “em claro” pela rede

ADO.NET: Recomendações de Segurança Modos de Autenticação

ADO.NET: Recomendações de Segurança Modos de Autenticação

Evitar personificação na Camada de Negócio para tornar o pooling de ligações mais eficiente

Criação de ligação pooled demora mais com autenticação Windows do que autenticação SQL; na execução de comandos, a diferença é insignificante

Connection string pode ser guardada em: Ficheiros XML de configuração Ficheiros UDL para provider OLEDB COM+ Catalog (para serviced components) Windows Registry ...

Usando autenticação Windows Autenticação Windows não necessita que a password seja guardada

ADO.NET: Recomendações de Segurança Connection String: Opções

Cifrar connection string no ficheiro XML

Restringir acesso a connection string guardada no Registry usando ACLs e/ou cifrando os dados

Alterar Persist Security info para false na connection string

Evita o retorno da password através da propriedade ConnectionString das classes SqlConnection ou OleDbConnection

ADO.NET: Recomendações de Segurança Connection String: Opções

Demonstração 1Segurança em ADO.NET

Protecção contra Ataques de injecção de código SQL

Autenticação Windows e SQL

Agenda Recomendações de Segurança na

utilização de ADO.NET no acesso a dados Recomendações no Tratamento de Erros Semântica de Transacções em ADO.NET Boas práticas de Performance Paginação de dados em ADO.NET Boas práticas usando Databound

Controls ADO.NET 1.1: Novas funcionalidades

Tratamento de erros: Boas práticas Tratamento de Excepções

No ADO.NET os erros são propagados através de Excepções disponibilizadas a partir das classes SqlException ou OleDbException

Estender classes base para fazer o throw de erros com mais significado para código específico de acesso a dados

Usar Excepções para verificar o estado de uma ligação é ineficiente Usar ConnectionState.Open ou ConnectionState.Close

Erros gerados em stored procedures usando o statement RAISEERROR São propagados para o ADO.NET como excepções

Excepções geradas se severidade > 10 Ligação é fechada se severidade > 16

Tratamento de erros: Boas práticas Erros em Stored Procedures

Tratamento de erros: Boas práticas Erros em Stored Procedures

Para mensagens informativas (severidade <=10), não é gerada excepção

Mensagens informativas podem ser capturadas no ADO.NET criando um handler para o evento infoMessage da connectionAddHandler conn.infoMessage, New

SqlClient.SqlinfoMessageEventHandler(Addressof MessageEventHandler)

Sub MessageEventHandler(ByVal sender As Object, ByVal e As SqlClient.SqlinfoMessageEventArgs)

‘do whatever

Demonstração 2Tratamento de erros em

ADO.NET

Tratamento de excepções e propagação de erros de Stored Procedures

Agenda Recomendações de Segurança na

utilização de ADO.NET no acesso a dados Recomendações no Tratamento de Erros Semântica de Transacções em ADO.NET Boas práticas de Performance Paginação de dados em ADO.NET Boas práticas usando Databound

Controls ADO.NET 1.1: Novas funcionalidades

Semântica de TransacçõesTransacções Manuais

Permitem um controlo mais efectivo da semântica transaccional

Aplicação é responsável pela transaction recovery, concorrência, segurança, ...

Transacções manuais não são suportadas no Distributed Transaction Coordinator (DTC)

Semântica de TransacçõesTransacções Manuais

SqlConnection.BeginTransaction inicia uma transacção e retorna o objecto SqlTransaction associado

Associar ao objecto da transacção todos os comandos que queremos executar no contexto dessa transacção

A classe SqlTransaction tem métodos para fazer commit e rollback de transacções

Semântica de TransacçõesTransacções Automáticas

Usar serviços COM+ para transacções automáticas Criar uma classe que herde de ServicedComponent

para obter um componente COM+ Acrescentar o atributo [Transaction] à classe para

controlar o comportamento transaccional

Semântica de Transacções Transacções Automáticas

O atributo [AutoComplete] determina “auto-magicamente” se uma transacção deve efectuar commit ou abort Se a execução do método termina sem erros, a transacção é

committed. Caso contrário a transacção é abortada Registar o componente no COM+ para ter transacções

automáticas Assinar o componente com “strong name”

Semântica de Transacções Níveis de isolamento

Controla a visibilidade das alterações efectuadas numa transacção Componentes COM+ 1.0 têm, por defeito, o nível de isolamento

Serializable Maior nível de isolamento, dados da transacção não são visíveis

para outras transacções até ao commit da transacção COM+ 1.5 (Windows.NET Server) permite configurar o isolation

level

Demonstração 3Manipulação de

TransacçõesTransacções Manuais

Agenda Recomendações de Segurança na

utilização de ADO.NET no acesso a dados Recomendações no Tratamento de Erros Semântica de Transacções em ADO.NET Boas práticas de Performance Paginação de dados em ADO.NET Boas práticas usando Databound

Controls ADO.NET 1.1: Novas funcionalidades

Boas práticas de PerformanceConfiguração da Pool de Ligações

O managed provider de SQL efectua automaticamente a pool de ligações baseado nas connection strings

As connection strings têm de corresponder exactamente para estarem na mesma pool

Pool de ligações para provider de SQL pode ser configurada na connection string

Especificar os seguintes parâmetros & valores na connection string Max Pool Size Min Pool Size

Não esquecer de fechar a ligação para a fazer retornar à pool

Boas práticas de PerformanceConfiguração da Pool de Ligações

Boas práticas de PerformanceTécnicas de recolha de dados

ADO.NET disponibiliza múltiplas técnicas de recolha de dados quando uma query é executada

É importante ter noção dos resultados que a query devolve para se escolher a técnica de recolha de dados mais apropriada

Boas práticas de PerformanceOpções de execução de queries

Opções de execução: ExecuteScalar – retorna o valor da primeira linha e

primeira coluna do result set. Útil para queries de contagens, somas, máximos, mínimos,...

ExecuteNonQuery – retorna o número de linhas afectadas pela execução da query. Usado com queries de insert, update, delete ou queries DDL, que não retornam resultados

ExecuteReader – retorna uma stream de resultados: “forward-only” e rápido

DataAdapter.Fill – preenche o DataSet com os resultados da query

Boas práticas de PerformanceManipulação de Blobs

ADO.NET suporta recolha e armazenamento de binários de/para o Data Provider

Dados binários podem ser guardados num byte array

Boas práticas de Performance Manipulação de DataSets

DataSets podem armazenar uma cópia local de resultados de queries num formato hierárquico

Aplicações clientes podem tratar um DataSet como um SGBDR local

DataSets são especialmente úteis para aplicações client-side com frequentes lookups a dados

Boas práticas de Performance Dataset Vs. Datareader

DataSets são mais pesados que DataReader para operações de leitura simples e “forward-only”

DataSets são mais funcionais que DataReaders DataSets podem ser usados para armazenar

resultados de uma query e funcionar como cache

Rich clients podem usar DataSets para evitar round trips à base de dados e usar DataReaders para leituras “forward-only”

Demonstração 4Boas práticas de

PerformancePooling de Ligações

Alternativas de recolha de dados Manipulação de Datasets

Manipulação de BLOBs

Agenda Recomendações de Segurança na

utilização de ADO.NET no acesso a dados Recomendações no Tratamento de Erros Semântica de Transacções em ADO.NET Boas práticas de Performance Paginação de dados em ADO.NET Boas práticas usando Databound

Controls ADO.NET 1.1: Novas funcionalidades

Paginação de dados em ADO.NET Paginação de dados User Interface paginado é melhor para grande volume de dados Ganhos com o acesso paginado a dados:

Menos largura de banda na rede Maior velocidade em cada execução Menor ocupação de memória na Base de Dados Menor ocupação de memória na camada de negócio Melhor performance para queries sobre tabelas ordenadas e indexadas em

colunas unique

Paginação de dados em ADO.NET Paginação de dados Custos com o acesso paginado a dados:

Necessita de uma query mais elaborada

Mais esforço na Base de Dados

Mais roundtrips entre cliente e a BD aumentando a carga em termos de queries

Concatenação de colunas é necessária para tabelas sem uma coluna unique

Paginação de dados em ADO.NETPaginação de dados Stored procedure com coluna unique

CREATE PROCEDURE GetProductsPaged @lastProductID int,

@pageSize int

AS

SET ROWCOUNT @pageSize

SELECT * FROM Products

WHERE [standard search criteria] AND ProductID > @lastProductID

ORDER BY [Criteria that leaves ProductID monotonically increasing]

Demonstração 5Paginação de Dados

Utilização de Paginação de Dados

Agenda Recomendações de Segurança na

utilização de ADO.NET no acesso a dados Recomendações no Tratamento de Erros Semântica de Transacções em ADO.NET Boas práticas de Performance Paginação de dados em ADO.NET Boas práticas usando Databound

Controls ADO.NET 1.1: Novas funcionalidades

Boas práticas usando Databound Controls Comparação entre Databound Controls Usar DataReaders para ASP.NET aceder a

dados Usar DataSets quando queremos fazer cache de

dados ou com web services DataGrid binding é mais lento do que usar o

controlo DataRepeater (early-bound)

Boas práticas usando Databound Controls Optimização de Databinding

Não esquecer que as ligações devem ser fechadas (mesmo no mundo do GC)

Analisar e optimizar índices das tabelas da base de dados

Reduzir os dados recolhidos da base de dados ao estritamente necessário

Usar ExecuteScalar e queries com os parametros unicamente necessários para maximizar a performance e reduzir o tráfego da rede

Boas práticas usando Databound Controls Optimização de Databinding Usar o early bound DataRepeater para recolher

dados de uma forma “forward-only” e rápida Armazenar dados de acesso frequente numa

cache/DataSet para evitar round trips com a base de dados

Demonstração 6Boas práticas de Data

BindingUtilização do Controlo Datagrid

Utilização do Controlo Datarepeater

Agenda Recomendações de Segurança na

utilização de ADO.NET no acesso a dados Recomendações no Tratamento de Erros Semântica de Transacções em ADO.NET Boas práticas de Performance Paginação de dados em ADO.NET Boas práticas usando Databound

Controls ADO.NET 1.1: Novas funcionalidades

ADO.NET 1.1: Novas funcionalidadesNovos providers

ADO.NET 1.1 inclui: SqlClient OleDb OracleClient novo Odbc novo

Não é necessário instalá-los separadamente Framework .NET 1.1 inclui ADO.NET 1.1

ADO.NET 1.1: Novas funcionalidadesSQLClient e Partial Trust

Cenário Uma aplicação vai ser executada em sand-boxes

partially-trusted Internet Explorer A partir de um share \\server\share\app.exe A partir de um URL http://server.com/app.exe …

Solução SqlClient (ADO.NET 1.1) Conceder permissões explicitamente

Microsoft .NET Framework 1.1 Configuration

ADO.NET 1.1: Novas funcionalidadesHasRows

Cenário Foi executado um SELECT Este pode ou não conter rows No ADO.NET 1.0, não é possível descobrir

isso sem iniciar a leitura Result-sets vazios podem dar problemas

com data-binding Solução

Usar propriedade SqlDataReader.HasRows

Sumário da sessão Nesta sessão abordámos:

Recomendações de Segurança na utilização de ADO.NET no acesso a dados Recomendações no Tratamento de Erros Semântica de Transacções em ADO.NET Boas práticas de Performance Paginação de dados em ADO.NET Boas práticas usando Databound Controls ADO.NET 1.1: Novas funcionalidades

A importância da Formação EspecializadaSafira lança curso em parceria com a DevelopMentor

Guerrilla Web Services.NET Objectivo: dotar os participantes da capacidade

de compreensão da tecnologia e da aplicação das melhores práticas, de forma eficaz e inovadora no seu ambiente de trabalho, no desenvolvimento de Web Services

Formadores de elevado prestígio, exclusivos da DevelopMentor: Aaron Skonnard Scott Boom Simon Horrel

fimfimvasco.nunes@safira.ptvasco.nunes@safira.pt

www.safira.pt www.safira.pt

top related