35
Desenvolvimento em .Net Acesso a Dados

Desenvolvimento em .Net - Acesso a Dados

Embed Size (px)

Citation preview

Page 1: Desenvolvimento em .Net - Acesso a Dados

Desenvolvimento em .Net

Acesso a Dados

Page 2: Desenvolvimento em .Net - Acesso a Dados

Objectivos● perceber objectivos do ADO.NET● conhecer arquitectura do ADO.net● saber o que são Datasets● saber o que são Datatables● saber o que são typed datasets● saber criar datasets e datatables

dinamicamente

Page 3: Desenvolvimento em .Net - Acesso a Dados

Objectivos● conhecer operações básicas com datasets e

tabelas● perceber conceito de serialização de dados● identificar objectos relativos a ligações fisicas à

base de dados● conhecer interfaces que têm que ser

implementados por dataproviders

Page 4: Desenvolvimento em .Net - Acesso a Dados

Objectivos● perceber como tirar vantagem de “programação

de dados” usando interfaces● saber utilizar connection, command,

datareader, dataadapter● perceber como é conseguida a integração entre

progress e .net● saber como é feita a integração progress .net

no MultiITV

Page 5: Desenvolvimento em .Net - Acesso a Dados

ADO.NET● Infraestrutura para acesso a dados● Independente da base de dados● “Disconnected architecture”● Convertivel para xml

Page 6: Desenvolvimento em .Net - Acesso a Dados

ADO.NET

Page 7: Desenvolvimento em .Net - Acesso a Dados

Dataset● base de dados em memória● tabelas + relações

– >1 tabela● desligado da base de dados

– depois de carregado● desconhece completamente a base dados

– tanto pode reter dados vindos de SQL Server, Progress, XML, ...

Page 8: Desenvolvimento em .Net - Acesso a Dados

Dataset e DataTable

Mental Note: schema vs dados

Page 9: Desenvolvimento em .Net - Acesso a Dados

Dados sem acesso a dados● Criar definição de dataset● Criar definição de datatable● Criar definição de datarow● Criar definição de

datacolumn● Inserir dados

● Criar Projecto 0305

Page 10: Desenvolvimento em .Net - Acesso a Dados

Operações básicas com datasets e tabelas

● dataset.ReadXml● dataset.WriteXml● datatable.Select

Page 11: Desenvolvimento em .Net - Acesso a Dados

Exercicio● Usando o projecto 0305 criar o seguinte

interface e testar o código apresentado

Page 12: Desenvolvimento em .Net - Acesso a Dados

Serializar● “Magia” que transforma um objecto em texto

– exemplo Xml referente a Dataset– mas pode ser aplicado a todo o tipo de objectos

● Também existe o inverso– deserializar

● Interessante para enviarmos objectos entre sistemas ou processos...

Page 13: Desenvolvimento em .Net - Acesso a Dados

Typed Dataset● Typed => que tem indicação do tipo de dados● Ao acedermos a uma coluna de uma linha

numa tabela de um dataset– Ds.Tables(0).Rows(0).Item(0)– não fazemos ideia do que está lá dentro (string,

numero, data, ...)● Typed Dataset resolve essa questão e ainda:

– Ds.Tables(0).Rows(0).NomeColumn– fornece uma sintaxe mais amigavel

Page 14: Desenvolvimento em .Net - Acesso a Dados

Typed Dataset● Se tivermos a definição da tabela/dataset em

XSD● podemos usar o utilitário xsd.exe

– typed dataset não é mais do que um dataset com mais propriedades

● herança....

Page 15: Desenvolvimento em .Net - Acesso a Dados

Exercicio● No último projecto...● Project / Add New Item / XML Schema

– mudar nome para tabela.xsd

Page 16: Desenvolvimento em .Net - Acesso a Dados

Exercicio● compilar projecto● acrescentar form com seguinte código

Page 17: Desenvolvimento em .Net - Acesso a Dados

Ligação a dados

Page 18: Desenvolvimento em .Net - Acesso a Dados

Data Providers● Implementam a ligação fisica à base de dados● objectos principais

– connection => ligação fisica à base de dados– command => comando para ser executado na base

de dados– datareader => resultado do comando num formato

forwardonly, readonly– dataadapter => resultado do comando em formato

dataset

Page 19: Desenvolvimento em .Net - Acesso a Dados

Data Providers● Disponiveis com a framework

– MS SQL Server => System.Data.SqlClient– ODBC => System.Data.OdbcClient– OLEDB => System.Data.OleDbClient

Page 20: Desenvolvimento em .Net - Acesso a Dados

Interfaces● Connection => IDbConnection● Command => IDbCommand● DataReader => IDbDataReader● DataAdapter => IDbDataAdapter

Page 21: Desenvolvimento em .Net - Acesso a Dados

Command● Execute

– devolve só o número de linhas afectadas com o comando.

– ideal para inserts / updates / deletes● ExecuteScalar

– devolve somente o valor da primeira coluna da primeira linha

– ideal para calculos. exemplo: comando que calcula um saldo

Page 22: Desenvolvimento em .Net - Acesso a Dados

Conjuntos de Dados● Command

– ExecuteReader● devolve um datareader

– forward only, read only– DataAdapter

● Fill– cria um dataset

Page 23: Desenvolvimento em .Net - Acesso a Dados

Exercicio● Criar projecto

0306● testar

DataReader

Page 24: Desenvolvimento em .Net - Acesso a Dados

Exercicio● testar

DataAdapter

Page 25: Desenvolvimento em .Net - Acesso a Dados

Parametros● Um comando pode ter parametros

– cada parametro tem um tipo, direcção e valor

● Acrescentar esta opção no projecto 0306

Page 26: Desenvolvimento em .Net - Acesso a Dados

Integração Progress / ADO.Net● ADO Datasets => Progress DataSets● ADO DataTables => Progress Table / Temp-

Tables● Progress 9.1D e superior inclui

– ProxyGenerator● gera uma DLL que permite o acesso via Application

Server a programas Progress● esses Programas podem (entre outras coisas) devolver

– ADO.Net DataTables, ADO.Net DataSets, ADO.Net Typed DataSets

Page 27: Desenvolvimento em .Net - Acesso a Dados

Integração Progress / ADO.Net● Vantagens

– 0 ligações ODBC– Triggers OK

● Implica que o programa esteja bem estruturado– Dados de Entrada e Dados de saída perfeitamente

definidos● Bonus

– qualquer programa Progress fica (quase) logo disponivel nas 2 plataformas

● e com esforço minimo fica disponivel via webservices

Page 28: Desenvolvimento em .Net - Acesso a Dados

Integração Progress / ADO.Net● Mais uma razão para nos programas Progress:

– separar acesso a dados, visualização dos mesmos– não escrever directamente nas tabelas. – nunca usar variaveis globais, reduzir em 99% a

utilização de variaveis com um ambito maior do que o procedimento onde são defindas

Page 29: Desenvolvimento em .Net - Acesso a Dados

Integração Progress / ADO.Net● E ainda:

– como parte do MultiITV● 1 DLL muito interessante=> ProxySistemaBase.dll● 3 Programas Progress

Page 30: Desenvolvimento em .Net - Acesso a Dados

ProxySistemaBase.dll● sb221.p

– Executa uma sql para a tabela e condição definidas, devolvendo os campos especificados.

Page 31: Desenvolvimento em .Net - Acesso a Dados

ProxySistemaBase.dll● sb250-01.p

– Executa um programa progress e devolve uma tabela.

● inspirado no Command.ExecuteReader / DataAdapter.Fill● sb250-02.p

– Executa um programa progress e devolve um valor.● inspirado no Command.ExecuteScalar

Page 32: Desenvolvimento em .Net - Acesso a Dados

Exercicio● Acrescentar no projecto 0306 referencias para:

– ProxySistemaBase.dll– Progress.Messages– Progress.o4glrt– Progress.ssl

Page 33: Desenvolvimento em .Net - Acesso a Dados

Exercicio

Page 34: Desenvolvimento em .Net - Acesso a Dados

Objectivos● perceber objectivos do ADO.NET● conhecer arquitectura do ADO.net● saber o que são Datasets● saber o que são Datatables● saber o que são typed datasets● saber criar datasets e datatables

dinamicamente

Page 35: Desenvolvimento em .Net - Acesso a Dados

Objectivos● conhecer operações básicas com datasets e

tabelas● perceber conceito de serialização de dados● identificar objectos relativos a ligações fisicas à

base de dados● conhecer interfaces que têm que ser

implementados por dataproviders