Aula 50 - Leitura de Dados com SqlDataReader e ResultSet
Enquanto os comandos DML (INSERT, UPDATE, DELETE) utilizam o método ExecuteNonQuery() para alterar dados sem retornar tabelas, a instrução SQL SELECT exige um mecanismo especializado para capturar e ler os registros retornados pelo SGBD.
No ecossistema C# (ADO.NET), utilizamos a classe SqlDataReader combinada com o método ExecuteReader() da classe SqlCommand. No Java (JDBC), utilizamos a interface ResultSet combinada com o método executeQuery() do PreparedStatement.
Tanto o SqlDataReader quanto o ResultSet funcionam através do conceito de Cursor Somente Leitura e Somente Avanço (Read-Only, Forward-Only):
O cursor posiciona-se inicialmente antes da primeira linha do conjunto de dados retornado.
O método Read() (C#) ou next() (Java) avança o cursor para a próxima linha. Ele retorna um valor booleano (true se existir uma próxima linha válida, ou false quando atingir o fim dos registros).
O percurso em todos os registros lidos é realizado utilizando a estrutura de repetição while.
Durante o percurso das linhas, os dados de cada coluna são extraídos através de indexadores ou métodos seletores de tipo (ex: GetString(), GetInt32(), GetDouble()) e mapeados para objetos orientados a objetos da nossa aplicação.
Exemplo de Leitura e Mapeamento em C#:
string sql = "SELECT id_produto, nome_produto, preco_unitarioEsse processo de Mapeamento Objeto-Relacional Manual transforma registros de tabelas SQL em coleções genéricas de objetos (List<Produto>), permitindo que a camada de apresentação gráfica exiba os dados em componentes como o DataGridView.
FROM Produtos WHERE quantidade_estoque > 0"; ListlistaEstoque = new List (); using (SqlCommand cmd = new SqlCommand(sql, conexao)) { conexao.Open(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { // Mapeamento do registro relacional para o objeto da classe Produto Produto p = new Produto(); p.Id = reader.GetInt32(0); // Coluna 0: id_produto p.Nome = reader.GetString(1); // Coluna 1: nome_produto p.Preco = reader.GetDouble(2); // Coluna 2: preco_unitario listaEstoque.Add(p); // Adiciona na coleção em memória RAM } } }

Comentários
Postar um comentário