Acesso a Dados (ADO.NET) 1 Março 2005 Engenharia Software 2005 2004 Link Consulting Agenda Introdução Evolução Arquitectura Data Providers Connections e Commands DataReaders DataSets e DataAdapters Databinding Transacções Suporte XML Notas e boas práticas 2
Evolução ADO.NET ADO OLE DB RDO DAO ODBC Modelo objectos construido na tecnologia.net Evolução natural do ADO Focado para arquitecturas N-Tier, Suporte XML, Ligações Fracas Componentes optimizadas para ambiente distribuido Evolução baseada no provider OLE DB Dificuldades: Tecnologia COM Suporte BD não relacionais (flat-files, BD hierarquicas) Modelos objectos construido na tecnologia COM Dificuldades: Provider escrito template C++ (ATL) Acesso optimizado para ODBC (SQL Server) : ODBCDirect Dificuldades: Especifico para acesso ODBC 1º Interface orientado a objectos Acesso directo BD locais (Access, Excel, DBF) : JET DB Engine Dificuldades: Pouco eficiente, requer excesso memória API standard escrita em C (baixo nivel) Dificuldades: Utilização em aplicações VB 3 Arquitectura 4
Data Provider Conjunto de componentes desenhados para manipulação e leitura de dados de uma fonte dados especifica Providers existentes: SQL Server - System.Data.SqlCliente.dll (TDS Tabular Data Stream) OLEDB Data Provider - System.Data.OleDb.dll ODBC Data Provider System.Data.Odbc.dll Custom Data Provider conjunto interfaces de acesso a dados Outros - Oracle, Exchange, etc 5 Connection Componente que serve de ligação à fonte de dados Parâmetros necessários: ConnectionString Contém atributos que definem o modo de acesso: Provider = SQLOLEDB; Data Source = servidor; Initial Catalog = BD; User ID = utilizador; Password = Pwd; Trusted Security = Yes; Exemplo: Dim connstring as String = Data Source=localhost;Initial Catalog=NorthWind Dim connection as SqlConnection = New SqlConnection(connString) connection.open()... connection.close() NOTA: As ligações têm de ser explicitamente fechadas 6
Command Componente que permite executar um comando na fonte de dados e possibilita: Retorno de informação (script SQL - SELECT) Modificar informação (script SQL INSERT, UPDATE, DELETE) Executar procedimentos (stored procedures), com e sem parameterização (Parameters Collection) Tipos Comando CommandType.StoredProcedure - Stored Procedure CommandType.TableDirect Tabela (OLEDB Provider) CommandType.Text - Script SQL (por defeito) Métodos ExecuteNonQuery (Execução script para alteração) ExecuteScalar (Retorno de cálculo de um valor: COUNT, MAX, MIN) ExecuteReader (Retorno de um resultado para DataReader) ExecuteXmlReader (Retorno de um resultado para XmlReader: SQL Server 2000 FOR XML ) 7 DataReader Componente que permite o acesso para leitura sequencial do resultado de um comando Forward Only e Read Only (lógica de cursor) Um único registo em memória de cada vez Necessáriamente ligada á fonte de dados Apropriado para consulta de grande volume dados Exemplo: SqlCommand command = connection.createcommand(); command.commandtext = "select nome, numero from alunos"; conn.open(); SqlDataReader reader = command.executereader(); while (reader.read()) s += reader.getstring(0); 8
DataSet Componente que permite aceder e manipular dados de forma desligada da fonte de dados Representação relacional, em memória, composta por tabelas, relações, chaves primárias, chaves primárias Representação de dados (XML) e estruturas (Schema) Combina e relaciona dados de fontes heterógeneas Facilita o transporte de dados em sistemas distribuidos, através de componentes.net, Web Services,.NET Remoting Permite aplicar o mecanismo de DataBinding a nivel gráfico 9 DataAdapter Componente que permite transferir dados e estrutura entre a fonte dados e o DataSet Métodos Fill Preenche o DataSet com o resultado do comando intrínseco ao DataAdapter (SelectCommand) Update Reconciliação de dados entre o DataSet e a fonte dados, recorrendo aos comandos intrínsecos do DataAdapter (InsertCommand, UpdateCommand, DeleteCommand) conforme o estado de cada registo (Added, ModifiedCurrent Deleted) 10
CommandBuilder O DataAdapter necessita ter definido comandos de INSERT, UPDATE, DELETE para actualizar (Update) a fonte dados O Wizard cria automáticamente os comandos em designtime através de uma ligação definida Em run-time o CommandBuilder pode ser utilizado para gerar comandos de actualização de uma única tabela com base no comando intríseco SELECT Exemplo: SqlDataAdapter dataadapter = new SqlDataAdapter("SELECT * FROM Customers", connection); SqlCommandBuilder cmdbuilder = new SqlCommandBuilder(dataAdapter); dataadapter.fill(dataset, "Customers"); // sem o SqlCommandBuilder, esta linha falharia custda.update(custds, "Customers"); connection.close(); 11 Demonstração (Demo 1) 12
DataBinding Mecanismo que permite associar componentes dados a objectos gráficos Fontes Dados: DataSet, DataTable, DataView, DataReader, HashTable, Listas, Arrays, Colecções Objectos Gráficos: Valores Simples: TextBox, Label Multiplos Registos: Repeater, DataList, DataGrid, ListBox, ComboBox Existe um wizard que facilita o DataBinding (design-time) List1.DataSource = dstitles1; List1.DataMember = titles ; List1.DataBind(); 13 Transacção - Conceitos Mecanismo que permite de uma forma isolada e consistente executar uma série de acções como uma unica operação atómica. Execução tudo-ounada. Quem são os players? Um Cliente requisita uma transacção e utiliza-a para executar tarefas (ex: componente.net, ASP.NET, web service) O Gestor Transaccional fornece transacções e coordena a confirmação (commit) transaccional no(s) gestor(es) recurso(s) O Gestor Recursos garante a consistência e o isolamento dos dados numa alteração e repõe a situação inicial dos mesmos em caso de erro (ex: Sql Server, Oracle) 14
Transacção Modelos Manual Gestão explicita de transacções pelo cliente Permite encadeamento explicito transacções Gestor Recursos é responsável por cada transacção. (GR + Gestor Transacional = 1) Não permite coordenação entre multiplos GR Automático As transacções são controladas pelo GT, mediante os atributos definidos no cliente. GT está separado do GR (ex: MS-DTC) Encadeamento implicito transacções Suporta partilha transacções entre componentes Nalguns casos permite coordenação entre multiplos GR e lógica transaccional two-phase commit 15 Transacção Formas Implementação SQL Statements BEGIN TRANS Vantagens Toda a lógica transaccional numa chamada única Modo mais eficiente de correr uma transacção É independente do sistema aplicacional Limitações Contexto transaccional apenas numa fonte dados Scripting especifico da fonte dados Exemplo : (T-SQL : Sql Server) BEGIN TRANSACTION UPDATE... IF @@Error!= 0 GOTO ERROR_HANDLER INSERT... IF @@Error!= 0 GOTO ERROR_HANDLER COMMIT TRANSACTION RETURN ERROR_HANDLER: ROLLBACK TRANSACTION RETURN 0 GO 16
Transacção Formas Implementação ADO.NET Transaction Vantagens Utiliza o modelo classes ADO.NET (Connection, Transaction, Command) Quase tão rápido como o mecanismo (Sql Statement) Numa transacção multiplas chamadas à mesma fonte dados Independente do scripting especifico da fonte dados Limitações Requer gestão ao nível da transacção/ligação SqlTransaction tx = con.begintransaction(); SqlCommand command = con.createcommand(); command.transaction = tx; Try{... tx.commit(); } Catch(Exception ex) { tx.rollback(); } 17 Transacção Formas Implementação Web Forms (ASP.NET) Vantagens Simples implementação, não requer gestão transaccional Limitações Todo o processamento da página numa unica transacção Implementação transaccional na camada apresentação Exemplo: <%@ Page Transaction= Required %> Web Service As mesmas vantagens e limitações dos Web Forms mas aplicadas ao serviço Exemplo: [WebMethod(TransactionOption=TransactionOption.Required)] 18
Transacção Formas Implementação Enterprise Service Componentes Requisitos Importar o namespace System.Enterprises Todososcomponentesdevemherdar a classe ServicedComponent Todos os contrutores devem ser publicos e definidos Assinar a aplicação (strong-name sn.exe k App.dll ) Na AssemblyInfo deve-se definir os seguintes atributos: [assembly: ApplicationName( YourApplicationName )] [assembly: ApplicationActivation(ActivationOption.Library)] [assembly: ApplicationKeyFile(..\\..\\App.snk )] Vantagens Possibilita transacções distribuidas Tira vantagem dos serviços COM+: instanciação, object pooling Desvantagens Perda performance na utilização do Enterprise Services 19 Suporte XML XSL/T, X-Path, etc DataSet Sync XmlData- Document XmlReader XmlText- Reader XmlNode- Reader 20
Suporte XML Visual Studio Contem editor para XML e outro para esquemas XSD DataSet Importar/Exportar dados XML (string, ficheiro, XmlReader,XmlDataDocumento) para um DataSet e viceversa Esquema pode ser deduzido de um DataSet XmlDataDocument Mecanismo sincronização com o DataSet Permite efecutar perguntas XPath num DataSet Efectuar transformações XSLT num DataSet 21 Suporte XML - Exemplos Sincronização entre XmlDataDocument e DataSet connection = new SqlConnection(... ); ordersadapter = new SqlDataAdapter( select...,connection); dataset = new DataSet(); ordersadapter.fillschema(dataset); xmldoc = new XmlDataDocument(dataSet); xmldoc.load( C:\Orders.xml ); Efectuar perguntas XPath num XmlDataDocument nodes = xmldoc.selectnodes( \\OrderID ); foreach(xmlnode node in nodes){ Console.WriteLine(node.InnerText); } 22
Suporte XML - Exemplos Efectuar transformações XSLT num DataSet xmldoc = new Xml.XmlDataDocumento(dataSet); xsldoc = new Xml.Xsl.XslTransform(); xsldoc.load( Order.xsl ); xpathnav = xmldoc.createnavigator(); xsldoc.transform(xpathnav,null); 23 Notas e Boas Práticas Na necessidade do uso de joins criem views e usem como tabelas Em regra geral todas as tabelas devem ter uma chave primária (autogerada) Na necessidade de executar multiplas operações (INSERT, UPDATE, DELETE) em mais que uma tabela utilizem transacções Recorrer a parâmetros em vez de concatenação de sql (Command) Regra geral, filtros e ordenações devem ser feitos directamente no SQL (usando WHERE, ORDER e GROUP) e não em componentes dados As licações devem ser abertas o mais tarde possível e fechadas o mais cedo possível para diminuir a utilização de recursos 24
Informação Util MSDN Web Site.NET Data Access Architecture: msdn.microsoft.com/library/default.asp?url=/nhp/defa ult.asp?contentid=28000519 Data Access Application Block: msdn.microsoft.com/library/default.asp?url=/library/en -us/dnbda/html/daab-rm.asp Performance: http://msdn.microsoft.com/library/enus/dnbda/html/bdadotnetarch031.asp Questões??? 25