Desenvolvimento de Componentes e Acesso a dados com ADO.NET



Documentos relacionados
Ambientes de Desenvolvimento Avançados Aula Teórico-Prática Programação com ADO.NET

Departamento de Engenharia Informática Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto ADO.NET.

INTRODUÇÃO AO MODELO ADO.NET (DESCONECTADO)

Acesso a Banco de Dados usando C#

ADO.NET - Roteiro básico e Boas Práticas

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

A interface do Microsoft Visual Studio 2005

Integração de Aplicações e Sistemas Abordagem Táctica da Integração

Agenda. Acesso a Dados (ADO.NET) Março 2005 Engenharia Software Link Consulting

Tarefa Orientada 2 Aplic. Manutenção de Produtos - DataGridView

Acessando Dados com ADO.NET

Visual Basic.NET ADO.NET. Professor: Danilo Giacobo. Página pessoal:

Acesso a Banco de Dados usando C# (MySql Provider)

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Computação Móvel 2007/2008

Ficha prática nº 7. SGBD Microsoft Access e SQL Server

Criar uma aplicação JPA2 com EclipseLink e H2

using System; using System.Collections.Generic; using System.Text; namespace Estudo { public class PessoaJuridica : Pessoa { private string cnpj;

Comandos de Manipulação

Sistemas Empresariais Integrados

Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C#

P S I 2. º A N O F 5 M E S T R E / D E T A L H E E P E S Q U I S A. Criar uma relação mestre-detalhe. Pesquisa de informação

Aplicação ReadWriteData

Bases de Dados 2007/2008. Aula 9

Tarefa Orientada 5 Aplic. Manutenção de Facturas de Clientes

Tarefa Orientada 19 Triggers

DSS 08/09. Camada de Dados - JDBC. Aula 1. António Nestor Ribeiro /António Ramires Fernandes/ José Creissac Campos {anr,arf,jfc}@di.uminho.

Bases de Dados 2007/2008. Aula 1. Referências

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

Persistência de Classes em Tabelas de Banco de Dados

DESENVOLVENDO SOLUÇÕES COM VISUAL FOXPRO 8 E 9

Introdução ao ASP.NET

DSS 09/10. DSS 09/10 Que métodos é que fazem parte de cada camada? Aplicações Multi-camada JDBC. Aula 3 DSS 09/10

Programação SQL. Introdução

Universidade da Beira Interior. Sistemas Distribuídos /2015 Curso: Engª Informática. Folha 11. JAX-RS: Java API for RESTful Web Services

Reconhecer alguns dos objectos VBA Automatizar bases de dados recorrendo à programação VBA e scripts SQL

Com criar relatório no Report Services do Microsoft SQL Server 2008 R2 integrado com o

Laboratório 1 SQL Server Integration Services

Banco de Dados. Maurício Edgar Stivanello

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

Construindo Aplicações com ASP.NET MVC 2.0 Aula 03 Luiz Alberto Ferreira Gomes. Ciência da Computação da PUC Minas

Tarefa Orientada 16 Vistas

Bases de Dados. Lab 1: Introdução ao ambiente

trigger insert, delete, update

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

Microsoft Visual Studio 2010 C# Volume II

SQL Structured Query Language

Fundament n os s da platafo f rm r a. NE N T André Menegassi

BD SQL Server. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

EXEMPLOS DE COMANDOS NO SQL SERVER

ASP.NET Gerando relatórios com o ReportViewer

Redes de Computadores. Trabalho de Laboratório Nº8

Consistem num conjunto de apontadores para instâncias especificas de cada relação.

Bases de Dados. O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na figura 1.

Manual de Administração Intranet BNI

COMPETÊNCIAS ESPECÍFICAS Compreender e utilizar a linguagem SQL, na construção e manutenção de uma base de dados.

Como acompanhar a evolução dos aplicativos? Console >> Desktop >> Web >> Mobile >> Cloud. Como aproveitar o melhor de cada programador?

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Microsoft Access Para conhecermos o Access, vamos construir uma BD e apresentar os conceitos necessários a cada momento

Catálogo Nacional de Compras Públicas. Manual de Fornecedores

MANUAL DE CONFIGURAÇÃO -ZIMBRA- Ajuda na configuração e utilização do cliente de correio eletrónico

Microsoft.NET. Desenvolvimento Baseado em Componentes

MANUAL DO EXCEL. Um campo é um espaço que contém determinada informação (ex: Nome do cliente X, Telefone do Sr. Y)

Prof. Carlos Majer Aplicações Corporativas UNICID

Banco de Dados. Prof. Antonio

Manual de Instruções para a Criação de Ficheiros CSR. Microsoft IIS 5/6

Solutions for Information Technologies. BIS-Navegador. Manual de Instalação para Microsoft SQL Server

Oracle SQL Developer

Microsoft.NET. Grupo: Eduardo Getassi Maicon Lima Rodrigo Cunha

CONSULTAS AO SQL SERVER 2005 ATRAVÉS DOS OBJETOS VISICONX

Sistemas Empresariais Integrados

Data Transformation Services (DTS) por Anderson Ferreira Souza

Guião de Introdução ao Eclipse IDE Índice

Dim formulário As Object formulário = Me Me.Text = "Título"

MySQL. Transacções em MySQL

Resolvendo objeto-relacional impedance mismatch com hibernate

Noções de. Microsoft SQL Server. Microsoft SQL Server

Solutions for Information Technologies. BIS-Navegador. IBM DB2 UDB v8.x

Forms Authentication em ASP.NET

Aula 1 Acesso a Banco de Dados

Lógica de Negócio e Acesso a dados. Parte 2.2

Laboratório 3. Base de Dados II 2008/2009

Solutions for Information Technologies. BIS-Navegador. Oracle

1. FILTRAR OS DADOS ATRAVÉS DE FORMULÁRIO (FILTER BY FORM)

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

PROGRAMA. Objectivos Gerais :

DESENVOLVIMENTO DE SOFTWARE AULA 1

Aplicabilidade: visão geral

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

A interface IDataSource retorna dados em formato tabular e disponibiliza apenas dois métodos: GetView e GetViewNames. O primeiro,

Sumário Introdução Breve História da Linguagem SQL l 0.3 Características da Linguagem SQL A Composição deste Livro 3

Microsoft Access. No Access, existem vários tipos de objectos: Tabelas. Consultas. Formulários Relatórios Macros Módulos

Tutorial C# - ADO.NET

Consultas (Queries) ou Interrogações

Acesso a Dados ADO.NET

Programação WEB (JSP + Banco Dados) Eng. Computação Prof. Rodrigo Rocha

Parte I Princípios básicos do Microsoft.NET Framework

JAVA 14 ODBC / JDBC Aceder a Bases de Dados através da Internet. Vitor Vaz da Silva

Transcrição:

Desenvolvimento de Componentes e Acesso a dados com ADO.NET.NET Apprentice Maio de 2004 José António Tavares jrt@isep.ipp.pt 1

Requisitos Conhecimentos de Base de Dados (Relacionais) Programação: De preferência VB ou C/C++ ou C# ou Java Paradigma OOP Estar familiarizado com Microsoft SQL Server ou outras aplicações como o Microsoft Access Conhecer o ADO embora não seja fundamental Estar familiarizado com o desenvolvimento de aplicações para o ambiente Microsoft Windows 2

Agenda 1. Programação com ADO.NET 2. Componentes na Framework.NET 3. Exemplos de Aplicação: Componentes + ADO.NET 4. Instalação de componentes Deployment 3

PARTE I Programação com ADO.NET 4

Conteúdo 1. Desenho de aplicações centradas em dados 2. Arquitectura ADO.NET 3. Ligação a Base de Dados 4. Operações ligadas à Base de Dados 5. Construção de Data Sets 6. Ler e Escrever XML com ADO.NET 7. Construir Data Sets a partir de Bases de Dados 5

1. Desenho de aplicações centradas em dados 2. Arquitectura ADO.NET 3. Ligação a Base de Dados PARTE I Programação com ADO.NET 4. Operações ligadas à Base de Dados 5. Construção de Data Sets 6. Ler e Escrever XML com ADO.NET 7. Construir Data Sets a partir de Bases de Dados 6

Cenários Conectados Um cenário conectado é aquele no qual os utilizadores estão permanentemente ligados à bases de dados Vantagens: É mais fácil exercer segurança ao nível do ambiente A concorrência é mais fácil de controlar Os dados estão mais actualizados que nos outros cenários Desvantagens É necessário haver uma ligação constante ao servidor Escalabilidade 7

Cenários Desconectados Num ambiente desconectado, um sub-conjunto de dados pode ser copiado e modificado independentemente e mais tarde as alterações podem ser introduzidas de novo na base de dados Vantagens Pode-se trabalhar a qualquer altura e pode-se efectuar uma ligação à base de dados apenas quando necessário Outros utilizadores podem usar os recursos Este tipo de ambientes aumenta a escalabilidade e desempenho das aplicações Desvantagens Os dados nem sempre estão actualizados Podem ocorrer conflitos de dados que têm que ser resolvidos 8

O que é o ADO.NET? ADO.NET é a solução de acesso a dados em.net Faz parte integrante Framework.NET Substitui completamente o ADO clássico Constitui uma evolução ao clássico ADO Existem similaridades mas mudou muito Suporta os modelos conectados e desconectados DataReaders para acesso conectados a dados DataSets e DataAdapters para desconectados Baseado em pluggable Data Providers SQL Server, Oracle, OLE DB & ODBC standard 9

ADO.NET A nível do armazenamento de Dados, o ADO.NET suporta vários tipos: Não estruturados; Estruturados, não-hierárquicos Ficheiros CSV (Comma Separated Value), Folhas Microsoft Excel, Ficheiros Microsoft Exchange, Hierárquicos Documentos XML e outros Bases de Dados Relacionais SQL Server, Oracle, Access, ODBC, 10

Visão.net 11

ADO.NET e a Framework.NET VB C++ C# Perl Python Web Services ASP.NET User Interface ADO.NET: Data and XML.NET Framework Class Library Common Language Runtime Message Queuing COM+ (Transactions, Partitions, Object Pooling) IIS WMI Win32 12

Evolução do ADO para ADO.NET Connection XxxConnection XxxTransaction ADO Command XxxCommand DataSet ADO.NET Recordset XxxDataReader XxxDataAdapter 13

ADO vs. ADO.NET 1/2 ADO Desenhado para acessos conectados Amarrado ao modelo físico dos dados RecordSet é o contentor central de dados RecordSet é uma (1) tabela que contem todos os dados Obter dados de > 1 tabela requer um comando JOIN Os dados "são planos": perde relações e a navegação é sequencial Os tipos de dados estão limitados aos tipos de dados COM/COM+ A partilha de dados é via COM marshalling Problemas com marshalling através firewalls (DCOM, binários) 14

ADO vs. ADO.NET 2/2 ADO.NET Desenhado acessos desconectados Pode modelar dados logicamente (em memória)! DataSet substitui o RecordSet DataSet pode conter múltiplas tabelas Obter dados de > 1 tabela não requer um comando JOIN Relações são preservadas e a navegação é relacional Os tipos de dados estão apenas limitados por esquemas (schema) XML Não é necessário conversão de tipo de dados XML, tal como HTML, é texto: Firewall friendly 15

Beneficios do ADO.NET Interoperacionalidade através do uso de XML Standard aberto Texto legível e compreensível pelos humanos Dados descrevem-se a si mesmos (XML) Usado transferir todos os dados em ADO.NET Escalabilidade através de DataSet desconectados Conecções não são mantidas por longos periodos Database locking não existe Works the way the Web works: Hit and Run! Maintainability Separação entre o tratamento de dados e a user interface 16

1. Desenho de aplicações centradas em dados 2. Arquitectura ADO.NET 3. Ligação a Base de Dados PARTE I Programação com ADO.NET 4. Operações ligadas à Base de Dados 5. Construção de Data Sets 6. Ler e Escrever XML com ADO.NET 7. Construir Data Sets a partir de Bases de Dados 17

Arquitectura do ADO.NET Managed Provider Classes DataReader Database Connection Command DataAdapter Company: Northwind Traders DataTables DataSet 18

Usar as classes ADO.NET num cenário conectado SqlDataReader SqlCommand SqlConnection Num cenário conectado, os recursos são mantidos no servidor até a ligação ser fechada 1. Abrir ligação 2. Executar comando 3. Processar linhas no reader 4. Fechar reader 5. Fechar ligação SQL Server 7.0 (e posterior) 19

Usar as classes ADO.NET num cenário desconectado DataSet SqlDataAdapter SqlConnection SQL Server 7.0 (and later) Num cenário desconectado, os recursos não são mantidos no servidor durante o processamento dos dados 1. Abrir a ligação 2. Encher o DataSet 3. Fechar a ligação 4. Processar o DataSet 5. Abrir a ligação 6. Actualizar a fonte de dados 7. Fechar a ligação 20

Arquitectura do ADO.NET Esta animação descreve a arquitectura do ADO.NET considerando ambos os modelos: conectado e desconectado 21

ADO.NET e XML O ADO.NET é totalmente integrado com XML Cliente XML Web Services Data Source 11 44 Request data XML DataSet 22 33 SQL query Results 55 Updated XML DataSet 66 SQL updates Utilização do XML numa aplicação ADO.NET desconectada 22

1. Desenho de aplicações centradas em dados 2. Arquitectura ADO.NET 3. Ligação a Base de Dados PARTE I Programação com ADO.NET 4. Operações ligadas à Base de Dados 5. Construção de Data Sets 6. Ler e Escrever XML com ADO.NET 7. Construir Data Sets a partir de Bases de Dados 23

O que são.net Data Providers Definição Um.NET data provider é um conjunto de classes que pode ser usado para efectuar ligações a bases de dados, manipular e actualizar os dados Tipos de.net data providers SQL Server.NET Data Provider OLE DB.NET Data Provider ODBC.NET Data Provider Outros (DB2/400, MySQL, ) 24

Modelo de objectos do ADO.NET DataSet SQL Server.NET Data Provider OLE DB.NET Data Provider SQL Server 7.0 (e posterior) OLEDB sources (SQL Server 6.5) 25

Os Namespaces System.Data System.Data.Common System.Data.SqlClient System.Data.OleDb System.Data.SqlTypes System.Xml 26

Classes do.net Data Provider XxxConnection exemplo, SqlConnection XxxTransaction exemplo, SqlTransaction XxxException exemplo, SqlException XxxError exemplo, SqlError XxxCommand exemplo, SqlCommand XxxParameter exemplo, SqlParameter XxxDataReader exemplo, SqlDataReader XxxDataAdapter exemplo, SqlDataAdapter XxxPermission exemplo, SqlClientPermission 27

Gestão de conecções Abrir e fechar conexões explicitamente: Open Close Abrir e fechar ligações implicitamente: Os Data Adapters podem abrir e fechar as ligações automaticamente sempre que necessário O método Dispose: Remove a conexão da pool de conexões 28

OleDbConnection e SQLConnection Criação, abertura e fecho de uma conecção a uma fonte de dados Exemplo OleDbConnection : String constr="provider=microsoft.jet.oledb.4.0;" + "Data Source=NWIND_RW.MDB"; OleDbConnection aconn = new OleDbConnection(conStr); aconn.open(); // acesso, inserção e actualização de dados aconn.close(); 29

Pooling de Conecções A abordagem desconectada melhora significativamente a escalabilidade No entanto, requisitar frequentemente conecções degrada o desempenho das aplicações O pooling de conecções permite uma pool de conecções idênticas partilhadas por múltiplos utilizadores/aplicações Escalável e rápido Os maiores benefícios são para as aplicações Web / n-tier ADO.NET usa pooling por defeito 30

Pooling de Conecções com o SQL Server Esta animação descreve como é que o pooling de conecções funciona com o Microsoft SQL Server 2000 31

1. Desenho de aplicações centradas em dados 2. Arquitectura ADO.NET 3. Ligação a Base de Dados PARTE I Programação com ADO.NET 4. Operações ligadas à Base de Dados 5. Construção de Data Sets 6. Ler e Escrever XML com ADO.NET 7. Construir Data Sets a partir de Bases de Dados 32

O objecto COMMAND O objecto command é uma referência a uma instrução de SQL ou Stored Procedure Propriedades (Name), Connection, CommandType, CommandText, Parameters Métodos ExecuteScalar, ExecuteReader, ExecuteNonQuery ExecuteXmlReader (só para o SqlCommand) 33

Retornar só um registo O ADO.NET é mais eficiente que o ADO clássico, dado que este retorna um RecordSet completo Exemplos de utilização: Obter as unidades em stock para um determinado produto Contar os produtos COUNT, MAX, MIN, AVERAGE Exemplo 34

Retornar múltiplos registos DataReader Read-only Forward-only O método ExecuteReader retorna um DataReader 35

Exemplo Data Reader Dim cmproducts As New SqlCommand( _ "SELECT ProductName, UnitsInStock " & _ "FROM Products", cnnorthwind) cnnorthwind.open() Dim rdrproducts As SqlDataReader rdrproducts = cmproducts.executereader() Do While rdrproducts.read() ListBox1.Items.Add(rdrProducts.GetString(0)) Loop rdrproducts.close() 36

Instruções de Inserção e Actualização de Dados Dim cmd As SqlCommand = New SqlCommand(_ "dbo.increaseproductprices", cnnorthwind) cmd.commandtype = CommandType.StoredProcedure cnnorthwind.open() Dim affected As Integer = cmd.executenonquery() cnnorthwind.close() MessageBox.Show( Registos Afectados: " & affected) 37

Transacções XxxConnection por exemplo, SqlConnection BeginTransaction XxxTransaction por exemplo, SqlTransaction Commit Rollback Exemplo 38

DEMO 01 Criar uma solução em Visual Studio.NET do tipo Database Criar uma pequena aplicação que ilustra o modelo conectado 39

1. Desenho de aplicações centradas em dados 2. Arquitectura ADO.NET 3. Ligação a Base de Dados PARTE I Programação com ADO.NET 4. Operações ligadas à Base de Dados 5. Construção de Data Sets 6. Ler e Escrever XML com ADO.NET 7. Construir Data Sets a partir de Bases de Dados 40

Como é constituído o DataSet DataSet DataTable DataTable Connection Stored Procedure DataColumn Database DataTable DataRelation Constraints DataRow 41

Modelo de Objectos do DataSet DataSet DataTableCollection DataTable DataColumnCollection DataColumn DataRowCollection DataRow ConstraintCollection Constraint DataRelationCollection DataRelation 42

DataSet, DataTable, DataColumn Criar um DataSet Arrastar o controlo DataSet da Toolbox Criar uma DataTable Editar a colecção de Tables de um DataSet usando a janela de propriedades Criar uma DataColumn e adicioná-la a uma DataTable Editar a colecção de Columns de uma DataTable usando a janela de propriedades 43

System.Data DataSet e DataTable Criar DataTable e adicionar a um DataSet DataSet ds = new DataSet(); // Create DataTable object: Customers. DataTable dt= new DataTable( Customers ); // Create and add columns to the table // 1. Explicitly create and Add a DataColumn DataColumn dc = new DataColumn( CustID, Int16 ); dt.columns.add( dc ); // 2. Implicitly Create and Add columns (DataColumn). dt.columns.add( First_Name, String ); dt.columns.add( Last_Name, String ); // Add the DataTable object to the DataSet ds.tables.add( dt ); 44

Restrição de Chave Primária Usar a propriedade PrimaryKey da DataTable Seleccionar as colunas pela ordem desejada Não permite mudar o nome à restrição Editar a colecção de Constraints da DataTable Adicionar uma UniqueConstraint Dar o nome à restrição Seleccionar as colunas Activar a caixa de chave primária 45

Expressões Customisadas As expressões Custom são colunas cujos valores são originados em cálculos e não em valores guardados Usar a propriedade Expression da DataColumn Sum([Unit Price] * [Quantity]) As funções de agregação podem usar relações pai/filho Avg, Count, Sum, Max, Min 46

DEMO 02 Um pequena aplicação que ilustra programaticamente, no modelo desconectado, a criação de DataSets 47

Inserir registos Criar uma linha nova DataRow drnovoempregado = dtempregados.newrow(); Preencher a nova linha drnovoempregado["empregadoid"] = 11; drnovoempregado["nome"] = "Nuno"; Adicionar a linha a uma DataTable dtempregados.rows.add(drnovoempregado); Criar, preencher e adicionar numa só instrução dtempregados.rows.add(new Object[]{11, "Nuno"}); 48

Modificar registos O método BeginEdit da classe DataRow Desliga o lançamento de eventos e excepções Os métodos EndEdit e CancelEdit da classe DataRow Ligam de novo o lançamento de eventos e excepções 49

Apagar registos O método Remove da classe DataRowCollection apaga completamente o registo da colecção dtempregados.rows.remove(drempregado); O método Delete da classe DataRow marca o registo como apagado. Este fica escondido, mas acessível, se necessário drempregado.delete(); 50

Alterações de dados no DataSet Uma DataRow pode guardar múltiplas versões de valores para cada coluna: DataRowVersion.Current O valor actual da coluna DataRowVersion.Original O valor da coluna antes de qualquer alteração ter ocorrido DataRowVersion.Proposed O valor da coluna durante o ciclo BeginEdit / EndEdit DataRowVersion.Default O valor por defeito em função do row s state 51

Processamento de Versões de linha datarow.beginedit(); datarow[ "au_lname" ] = "Brown"; CURRENT ORIGINAL PROPOSED White White N/A White White Brown datarow.endedit(); Brown White N/A datarow[ "au_lname", DataRowVersion.Current ] // Brown datarow[ "au_lname", DataRowVersion.Original ] // White 52

Processamento do Row State CURRENT ORIGINAL ROW STATE White White Unchanged dr["au_lname"] = "Brown"; Brown White Modified dr.acceptchanges(); Brown Brown Unchanged 53

Actualizações com o DataAdapter Actualizações são escritas na base de dados usando o método Update do DataAdapter DataAdapter analisa o Row State para cada linha Executa a acção apropriada (insert, update or delete) de acordo com o seu row state Usa os objectos Command atribuidos às suas propriedades InsertCommand, UpdateCommand e DeleteCommand DataRows in DataTable DataAdapter Action RowState = Unchanged RowState = Added RowState = Modified RowState = Deleted Ignore Use INSERT command Use UPDATE command Use DELETE command 54

Optimização de actualizações Objectos do tipo DataSet e DataTable suportam o método GetChanges GetChanges sem argumentos Extrai todas as linhas cujo RowState não é Unchanged dschanges = ds.getchanges(); GetChanges com argumento do tipo RowState Extrai apenas as linhas com um RowState especificado Permite controlar a ordem em que os inserts, updates e deletes são efectuados à base de dados changes = ds.getchanges( DataRowState.Added ); 55

Usar o método SELECT As DataTables têm um método de Select que permite filtrar as DataRows de modo a cumprir com restrições de ordenação e de estado Três parâmetros opcionais Expressões de filtragem, como por exemplo, "City= Porto'" Ordenar, por exemplo, "City ASC" DataViewRowState, por exemplo, Deleted 56

Criar um DataView Criar um DataView através da utilização dos controlos Criar um DataView programaticamente DataView dvprodutos = new DataView(dsNorthwind.Tables["Products"]); dvprodutos.sort = "UnitPrice"; dvprodutos.rowfilter = "CategoryID > 4"; grdproducts.datasource = dvprodutos; Aplicar um DataView a um DataTable dvprodutos.table = dsnorthwind.tables("products"); 57

Objectos DataView - Exemplo // Code for mytable Customers with // Name column not shown DataView view1 = new DataView( mytable ); DataView view2 = new DataView( mytable ); // Creates Ascending view of Customers by Name view1.sort = Name ASC ; // Set the view to show only modified (original) rows view2.rowstatefilter= DataViewRowState.ModifiedOriginal; // Bind to UI element(s)... DataGrid mygrid = new DataGrid(); mygrid.setdatabinding( view1, Customer ); //... 58

DEMO 03 Considerando a aplicação do DEMO 02 e programaticamente: Adicionar e actualizar registos Criar DataViews 59

1. Desenho de aplicações centradas em dados 2. Arquitectura ADO.NET 3. Ligação a Base de Dados PARTE I Programação com ADO.NET 4. Operações ligadas à Base de Dados 5. Construção de Data Sets 6. Ler e Escrever XML com ADO.NET 7. Construir Data Sets a partir de Bases de Dados 60

ADO.NET: Data e XML ADO.NET: Data and XML System.Data System.Xml OleDb SqlClient XSL Serialization Common SQLTypes XPath 61

XML e ADO.NET Método ReadXML dsnorthwind.readxml(@"c:\xml\teste.xml", XmlReadMode.InferSchema); Método WriteXML dsnorthwind.writexml(@"c:\xml\teste.xml", XmlWriteMode.WriteSchema); 62

DEMO 04 Utilização de XML Um pequena aplicação que ilustra a persistência de DataSets 63

1. Desenho de aplicações centradas em dados 2. Arquitectura ADO.NET 3. Ligação a Base de Dados PARTE I Programação com ADO.NET 4. Operações ligadas à Base de Dados 5. Construção de Data Sets 6. Ler e Escrever XML com ADO.NET 7. Construir Data Sets a partir de Bases de Dados 64

DataAdapter Pode-se preencher um DataSet através de um DataAdapter Invoca-se o método Fill do DataAdapter O método Fill executa o SelectCommand Preenche o DataSet com a estrutura e conteúdo do resultado do inquérito Para optimizar o desempenho adataset.enforceconstraints=false Chamar o método BeginLoadData do DataTable 65

DataAdapter - Exemplo // Visual C# DataSet dscustomers = new DataSet(); dscustomers.tables.add(new DataTable("Customers")); dscustomers.tables[0].beginloaddata(); dacustomers.fill(dscustomers, "Customers"); dscustomers.tables[0].endloaddata(); datagrid1.datasource = dscustomers.tables[0].defaultview; 66

Algumas operações do DataAdapter Deve-se usar o método Merge para juntar dois DataSets um original e um que contenha apenas as mudanças ao original O método de Update de um DataAdapter chama o comando apropriado para cada linha alterada (INSERT, UPDATE, DELETE) numa DataTable específica O método AcceptChanges de um DataSet efectua o Commit a todas as alterações efectuadas a um DataSet específico desde o seu último carregamento ou desde que foi chamado este método pela última vez 67

DEMO 05 Um pequena aplicação que mostra como criar e preencher DataSets a partir de fontes de dados e como persistir as alterações dos DataSets para fontes de dados BD em MS Access 68

Typed DataSets Visual Studio.NET pode gerar strongly typed DataSets Classes customisadas derivadas de DataSet Proporciona toda a funcionalidade dos DataSet Contem classes, métodos, eventos e propriedades especificas relacionadas com os dados em questão Por exemplo, um typed DataSet pode conter: Uma classe chamada Customers deriveda de DataTable Uma classe chamada CustomerRow deriveda de DataRow com propriedades CustomerID e Name 69

Typed DataSets - Vantagens Compile-time type checking Funcionalidades adicionais Por exemplo, o método FindByCustomerID Código mais legível e manutenção facilitada Total suporte pelo IntelliSense Torna o código mais legível e menos sujeito a erros string s = customerdataset.customers[ 1 ].Name; comparado com : string s = (string) customerdataset. Tables["Customers"]. Rows[ 1 ].Item[ "Name" ]; 70

Typed DataSets - Criar Visual Studio gera typed DataSets a partir definições XML schema (XSD) Visual Studio oferece varias formas de gerar definições XML schema A forma mais fácil é: Seleccionar o Add New Item wizard Seleccionar a template Data Set para adicionar um ficheiros XSD Arrastar uma table ou uma stored procedure do Server Explorer para a área de trabalho E é tudo! 71

DEMO 06 As mesma aplicação do DEMO 04, mas agora com Typed DataSets 72

PARTE II Componentes na Framework.NET 73

Criação Componente para a Framework.NET Pontos a considerar 1. Uso de Namespaces e declaração de classes 2. Implementação de classes 3. Implementação estruturada de gestão de excepções 4. Criação de propriedades 5. Compilação de componentes 74

Criação Componente para a Framework.NET Componente simples que contem apenas um método que valida utilizadores. O utilizador e a respectiva palavra chave estão numa tabela da Base de Dados. Exemplo de demonstração no Visual Studio 75

Criar uma Simples Aplicação Cliente Pontos a considerar 1. Uso das Libraries 2. Instanciação dos Componentes 3. Chamar os Componentes 4. Contruir a aplicação Cliente 76

Criar uma Simples Aplicação Cliente para a Consola Exemplo de demonstração no Visual Studio 77

Criar uma Simples Aplicação Cliente do tipo Windows Forms Exemplo de demonstração no Visual Studio 78

PARTE III Exemplos de Aplicação: Componentes + ADO.NET 79

Loja de Informática Componente simples que implementa as regras de negócio de uma loja de equipamentos e artigos de informática. 80

Loja de Informática Desenvolvimento em duas camadas Apresentação Interface com utilizador Aplicação local Acesso via Web Outras Regras de Negócio - Componente 81

Loja de Informática Funcionalidades do componente: Validação de utilizador/ password ; Inserir / actualizar clientes; Verificar se um determinado cliente / produto existe; Actualizar a quantidade de produtos quando é feita uma venda; Inserir vendas (transacções) com validação da existência dos produtos em stock. 82

Loja de Informática Exemplo de demonstração no Visual Studio 83

PetShop - Microsoft Microsoft.NET Pet Shop http://msdn.microsoft.com/library/en-us/dnbda/html/bdasamppet.asp 84

PetShop - Microsoft.NET Pet Shop high-level logical architecture 85

PetShop - Microsoft.NET Pet Shop 2.0 Architecture 86

PetShop - Microsoft.NET Pet Shop 3.0 Architecture 87

PARTE IV Instalação de componentes Deployment 88

Instalação de componentes Deployment 1. Conceitos Comuns 2. Aplicações Simples 3. Aplicações Baseadas em Componentes 4. Configuração e Distribuição 89

Conceitos Comuns Classes and Types Used in.net Framework Applications Are: Organized in a hierarchy of namespaces Stored in PE files, such as DLLs and EXEs Fully described by metadata Assemblies: Are made up of one or more PE files Contain a manifest that identifies the assembly and its files Specify exported and imported classes and types Are units of deployment, reuse, and versioning 90

Aplicações Simples Require.NET Runtime Be Installed on Local Computer Can Be Run Directly from a File Server or Copied Locally Make No Registry Entries Cannot Break Another Application Eliminate DLL Hell Can Be Uninstalled by Deleting Locally Copied File(s) 91

Aplicações baseadas em componentes Assemblies Private to an Application Same as a simple application Assemblies Private to Related Applications Deployed into a common subdirectory Assemblies Shared with Other Unrelated Applications Require a strong name and version information Deployed into the global assembly cache 92

Configuração e Distribuição Configuration Maintained in plain-text files Deployment Common distribution formats, such as a.cab file or a.msi file Common distribution mechanisms, such as Windows 2000 IntelliMirror or Microsoft Systems Management Server 93

Cenários de Instalação A Simple Application A Componentized Application Specifying a Path for Private Assemblies A Strong-Named Assembly Deploying Shared Components A Versioned Assembly Creating Multiple Versions of a Strong-Named Assembly Binding Policy Deploying Multiple Versions of a Strong-Named Assembly 94

A Simple Application Use the Microsoft Intermediate Language Disassembler (Ildasm.exe) to Examine the Assembly Manifest Version information Imported types Exported types Deploy the Application by: Running the executable file directly from a file server, or Installing it locally by copying the file Uninstall the application by deleting the file 95

Componentized Application Assembly Component to Be Used by Application Assembly Stringer.dll is built from Stringer.cs as follows: csc csc /target:library Stringer.cs Client Needs to Reference Assembly csc csc /reference:stringer.dll Client.cs Deployment by File Server or Local Copy 96

Specifying a Path for Private Assemblies Specifying a Directory From Which to Load Private Assemblies. Client.exe.config file specifies a privatepath tag <configuration> <configuration> <runtime> <runtime> <assemblybinding <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing <probing privatepath= MyStringer"/> </assemblybinding> </runtime> </runtime> </configuration> </configuration> Configuration File s XML Tags Are Case-Sensitive 97

Strong-Named Assembly Global Assembly Cache Contains assemblies shared by unrelated applications Strong Names Are Required for Assemblies in the Cache Generate a public-private key pair: sn sn k k orgkey.snk Add code to source file to specify version and key information: #if #if STRONG STRONG [assembly: [assembly: System.Reflection.AssemblyVersion("1.0.0.0")] [assembly: [assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")] #endif #endif Compile: csc csc /define:strong /define:strong /target:library /target:library /out:areverser.dll AReverser.cs AReverser.cs 98

Deploying Shared Components Installing the Strong-Named Component in the Global Assembly Cache gacutil /i /i AReverser.dll Examining the Global Assembly Cache gacutil /l /l Removing a Shared Component File gacutil /u /u AReverser 99

A Versioned Assembly Applications Need to Bind to a Suitable Version of a Shared Assembly The Version Number Is Represented by a 4-Part Number <major version>.<minor version>.<revision>.<build number> Applications Get the Versions of Assemblies with Which They Were Built and Tested Unless overridden by explicit policy rules 100

Creating Multiple Versions of a Strong-Named Assembly Building Two New Versions of AReverser with a New Key Pair Specify version 2.0.0.0 for one and 2.0.1.0 for the other For AReverser_v2.0.0.0\AReverser.cs: Build #if #if STRONG STRONG [assembly: [assembly: System.Reflection.AssemblyVersion("2.0.0.0")] System.Reflection.AssemblyVersion("2.0.0.0")] [assembly: [assembly: System.Reflection.AssemblyKeyFile("orgVerKey.snk")] System.Reflection.AssemblyKeyFile("orgVerKey.snk")] #endif #endif csc csc /define:strong /define:strong /target:library /target:library /out:areverser_v2.0.0.0\areverser.dll /out:areverser_v2.0.0.0\areverser.dll AReverser_v2.0.0.0\AReverser.cs AReverser_v2.0.0.0\AReverser.cs Use Ildasm.exe to Examine Different Versions Note the publickey and version numbers.assembly.assembly AReverser AReverser { {.......publickey.publickey = = (00 (00 24 24...... 82 82 B1 B1 F2 F2 A0 A0 ) ).hash.hash algorithm algorithm 0x00008004 0x00008004.ver.ver 2:0:1:0 2:0:1:0 101

Binding Policy Policy Resolution Allows an assembly reference, specified at compile time, to be modified after the application has been deployed without recompiling Happens in the Following Stages: 1. Application-policy resolution 2. Publisher-policy resolution 3. Administrator-policy resolution In Each Stage, an XML Configuration File Is Read Note: XML is case-sensitive Version Numbers of Assemblies That Are Not Strong-Named Are Not Checked Configuration File Tag Examples privatepath bindingredirect 102

Deploying Multiple Versions of a Strong-Named Assembly Install Both Versions of AReverser.dll into the Global Assembly Cache gacutil /i /i AReverser_v2.0.0.0\AReverser.dll gacutil /i /i AReverser_v2.0.1.0\AReverser.dll Compile the VerClient Executable and Specify Version 2.0.0.0 of the AReverser Component csc csc /reference:mystringer\stringer.dll /reference:areverser_v2.0.0.0\areverser.dll VerClient.cs Use Version Policies to Control Assembly Binding at Run Time 103

Packaging and Deployment Tools Assembly Linker (Al.exe) Global Assembly Cache tool (Gacutil.exe) MSIL Disassembler (Ildasm.exe) Strong Name (Sn.exe) Native Image Generator (Ngen.exe) Assembly Binding Log Viewer (Fuslogvw.exe).NET Framework Configuration Tool (Mscorcfg.msc) Code Access Security Policy Tool (Caspol.exe) 104

Perguntas & Respostas 105

Mais Informação... MSDN Library http://msdn.microsoft.com/library.net framework center http://msdn.microsoft.com/netframework/ C# http://msdn.microsoft.com/vcsharp/ ASP.net http://www.asp.net Laboratório.net do ISEP/IPP http://www.dei.isep.ipp.pt/labdotnet/ 106

Desenvolvimento de Componentes e Acesso a dados com ADO.NET.NET Apprentice Maio de 2004 José António Tavares jrt@isep.ipp.pt 107