Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Sumário
• Ligação à Base de Dados• Comandos• Acesso a dados “Connected”• Acesso a dados “Disconnected”• Actualização dos dados (“Disconnected”)• DataSets através do assistente• Estruturas de Dados sem SGBD
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Ligação à Base de Dados
• Estabelecimento de ligação:SqlConnection connection = new SqlConnection({connection
string});
• A “connection string” deverá ser sempre declarada de forma centralizada - através do ficheiro de configuração da aplicação ou de uma simples variável estática na class Program
• A conexão deverá ser sempre aberta e fechada, antes e depois do acesso aos dados da base de ados, respectivamente.
connection.Open();// (...)connection.Close();
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Comandos
• A execução de comandos para Bases de Dados dos tipo SQL Server deve ser implementada através da instanciação da classe SqlCommand.
Exemplo:SqlCommand command = new SqlCommand("SELECT * FROM clientes WHERE id_cliente=" + idclient, connection);
• Este comando permite essencialmente a execução de queries SQL (SELECT, INSERT, UPDATE, DELETE) e de Stored Procedures.
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Comandos
• A execução do comando deverá ser efectuada segundo um dos seguintes métodos:– ExecuteNonQuery, ExecuteScalar, ExecuteReader ou
ExecuteXmlReader
• Cada método deverá ser executado de acordo com a natureza da operação que se pretende realizar
• A fim de introduzir alguma simplicidade na execução de comandos em Bases de Dados, a Microsoft introduziu a biblioteca SqlHelper – que poderá ter-se em conta sempre que há necessidade de efecutar operações que não exijam elevados graus de felxibilidade e complexidade.
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Acesso a dados “Connected”
• Este acesso inicia-se com a execução do método ExecuteReader
SqlDataReader dr = command.ExecuteReader();dr.Read();lblID.Text = dr["id_cliente"].ToString();lblNome.Text = dr["nome"].ToString();lblMorada.Text = dr["morada"].ToString();
• A leitura de cada registo é realizada através do método Read da classe SqlDataReader antes instanciada
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Acesso a dados “Disconnected”
• Este tipo de acesso requer desde logo a intanciação de uma estrutura em memória capaz de acolher os dados: um DataSet:SqlConnection connection = new
SqlConnection(Program.connectionString);connection.Open();da = new SqlDataAdapter("SELECT * FROM Produtos", connection);ds = new DataSet();da.Fill(ds);dataGridView1.DataSource = ds.Tables[0];connection.Close();
• A transição dos dados entre a memoria secundária e a memória primária é garantida através de um objecto do tipo DataAdapter. O procedimento Fill do DataAdapter preenche o DataSet antes intanciado
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Actualização dos dados (“Disconnected”)
• Depois de manipulados os dados em memória (DataSet), a transição destas mudanças para as correpondentes estruturas físicas efectua-se através do comando Update do DataAdapter:
SqlCommandBuilder cmd = new SqlCommandBuilder(da);DataSet dsChanges = ds.GetChanges();if (dsChanges != null){
da.Update(dsChanges);ds.AcceptChanges();
}
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Actualização dos dados (“Disconnected”)
• Os registos que contém as mudanças efectuadas ao nível da memória podem ser obtidos através do método GetChanges, presente tanto em objectos do tipo DataSet como DataTable
• A classe SqlCommandBuilder permite “gerar” no DataAdapter instruções de Insert, Update ou Delete com base no comando Select associado a esse mesmo DataAdapter.
• Para limpar o registo de alterações no DataSet, deve-se executar o método AcceptChanges
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# DataSets através do assistente• O Visual Studio permite a criação de DataSets de forma rápida e visual.
Ferramentas próprias permitem a criação de toda a estrutura do interesse da aplicação automaticamente com base no sistema físico:
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# DataSets através do assistente
• Esta ferramenta permite criar estruturas apropriadas que são automaticamente convertidas em objectos (classes) descendentes das “primitivas” especificadas pela plataforma .NET (DataSet, DataTable, DataRow, etc)
• Incluí TableAdapters específicos• Possibilita definir métodos especificos para consulta ou
manipulação da Base de Dados.
Hélder Oliveira [email protected] ADO. NET – Situações práticas
C# Estruturas de Dados sem SGBD
• Os DataSets e todos os objectos a ele associados permitem criar estruturas de memória flexíveis e adaptáveis a uma vasta variedade de problema
• São estruturas completamente independentes de qualquer sistema de base de dados
• Permitem guardar e restaurar o seu estado e estrutura em ficheiros XML
• Pode traduzir-se num meio fácil de guardar registos ou estruturas de dados simples de forma bem estruturada e relacional