Post on 03-Jun-2015
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
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
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
ADO.NET● Infraestrutura para acesso a dados● Independente da base de dados● “Disconnected architecture”● Convertivel para xml
ADO.NET
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, ...
Dataset e DataTable
Mental Note: schema vs 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
Operações básicas com datasets e tabelas
● dataset.ReadXml● dataset.WriteXml● datatable.Select
Exercicio● Usando o projecto 0305 criar o seguinte
interface e testar o código apresentado
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...
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
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....
Exercicio● No último projecto...● Project / Add New Item / XML Schema
– mudar nome para tabela.xsd
Exercicio● compilar projecto● acrescentar form com seguinte código
Ligação 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
Data Providers● Disponiveis com a framework
– MS SQL Server => System.Data.SqlClient– ODBC => System.Data.OdbcClient– OLEDB => System.Data.OleDbClient
Interfaces● Connection => IDbConnection● Command => IDbCommand● DataReader => IDbDataReader● DataAdapter => IDbDataAdapter
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
Conjuntos de Dados● Command
– ExecuteReader● devolve um datareader
– forward only, read only– DataAdapter
● Fill– cria um dataset
Exercicio● Criar projecto
0306● testar
DataReader
Exercicio● testar
DataAdapter
Parametros● Um comando pode ter parametros
– cada parametro tem um tipo, direcção e valor
● Acrescentar esta opção no projecto 0306
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
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
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
Integração Progress / ADO.Net● E ainda:
– como parte do MultiITV● 1 DLL muito interessante=> ProxySistemaBase.dll● 3 Programas Progress
ProxySistemaBase.dll● sb221.p
– Executa uma sql para a tabela e condição definidas, devolvendo os campos especificados.
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
Exercicio● Acrescentar no projecto 0306 referencias para:
– ProxySistemaBase.dll– Progress.Messages– Progress.o4glrt– Progress.ssl
Exercicio
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
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