Você está aqui: C# ::: C# + Bancos de Dados ::: DbDataReader |
Saiba mais sobre o funcionamento de um DataReaderQuantidade de visualizações: 15589 vezes |
|
Quando pensamos em efetuar uma conexão C# com um banco de dados e listar os registros de uma determinada tabela, um DataReader (na verdade o nome da classe é DbDataReader) é o terceiro componente na lista daqueles necessários para efetuar tal tarefa. O primeiro componente que precisamos é DbConnection, uma classe abstrata que tem entre suas classes derivadas as classes OdbcConnection, OleDbConnection, OracleConnection, SqlConnection e SqlCeConnection. Um objeto de uma classe que descende de DbConnection é o responsável por obter e manter a conexão com o banco de dados. O segundo componente é aquele que permite "conversar" com o banco de dados, a saber, um objeto da classe DbCommand. Entre as classes que derivam de DbCommand podemos citar OdbcCommand, OleDbCommand, OracleCommand, SqlCommand e SqlCeCommand. Usamos objetos da classe DbCommand para enviar instruções SQL ao banco de dados. Uma vez conectados ao banco de dados e com uma instrução SELECT pronta para ser executada, é preciso que tenhamos um componente que guarde os registro retornados pela instrução SELECT. Este componente é, em boa parte das aplicações, um DataReader. Um DataReader é um objeto que implementa a interface System.Data.IDataReader. Este componente permite obter os dados retornados por um DbCommand em forma de registros (um registro por linha). Os dados mantidos no componente são de leitura rápida, mas, de mão única e somente leitura. Por mão única entendemos que os dados são lidos apenas em uma direção, ou seja, um DataReader não permite voltar ao registro anterior. Veja um trecho de código no qual efetuamos uma conexão com o banco de dados, disparamos um comando SELECT e obtemos os registros retornados em um DbDataReader (usei um OdbcDataReader porque me conectei a um banco de dados MySQL usando ODBC): ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
private void button1_Click(object sender, EventArgs e){
// obtém a conexão com o banco de dados
OdbcConnection conn = ConexaoODBC.obterConexao();
// string para auxiliar na exibição dos dados lidos
string temp = "Registros retornados:\n\n";
if(conn != null){
// obtém todos os clientes cadastrados
OdbcCommand cmd = new OdbcCommand("SELECT * FROM clientes",
conn);
// obtém os dados retornados em forma de DataReader
OdbcDataReader dr = cmd.ExecuteReader();
// vamos exibir os dados de cada cliente encontrado
while(dr.Read()){
temp += dr["id"].ToString() + " ::: ";
temp += dr["nome"].ToString() + " ::: ";
temp += dr["cidade"].ToString() + " ::: ";
temp += dr["estado"].ToString() + "\n";
}
// fecha o DataReader
dr.Close();
// fecha a conexão
ConexaoODBC.fecharConexao();
// exibe o resultado
MessageBox.Show(temp);
}
}
Neste exemplo usei ODBC. Se estiver usando SQL Server, use as classes correspondentes (SqlConnection, SqlCommand e SqlDataReader). Note que um DataReader é sempre obtido como resultado de uma chamada ao método ExecuteReader() da classe DbCommand: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // obtém os dados retornados em forma de DataReader OdbcDataReader dr = cmd.ExecuteReader(); Quando o comando SQL é enviado ao banco de dados e um DataReader é retornado, seu cursor é posicionado antes do primeiro registro. Assim, é preciso efetuar chamadas ao seu método Read() para que o cursor seja posicionado no próximo registro. Quando o método retornar false saberemos que não há mais registros a serem lidos. Por esta razão, um laço while é quase sempre usado neste cenário: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
// vamos exibir os dados de cada cliente encontrado
while(dr.Read()){
temp += dr["id"].ToString() + " ::: ";
temp += dr["nome"].ToString() + " ::: ";
temp += dr["cidade"].ToString() + " ::: ";
temp += dr["estado"].ToString() + "\n";
}
Cada registro contido no DataReader é composto de uma coleção de objetos. Cada objeto representando um campo na tabela. Os objetos desta coleção podem ser acessados por índices (começando em 0) ou pelo nome do campo na tabela. Neste exemplo usamos o método de acessar cada objeto usando o nome do campo. |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de C# |
Veja mais Dicas e truques de C# |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






