O documento discute várias situações práticas para acesso a dados usando ADO.NET, incluindo conexão a bancos de dados, execução de comandos, acesso a dados "connected" e "disconnected", atualização de dados "disconnected" e uso de DataSets.
1. ADO. NET – Situações práticas
Hélder Oliveira helderjmo@gmail.com
2. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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
3. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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();
4. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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.
5. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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.
6. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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
7. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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
8. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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();
}
9. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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
10. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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:
11. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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.
12. Hélder Oliveira helderjmo@gmail.com ADO. NET – Situações práticas
• 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