P. 1
C# - Acessando e Obtendo Dados Com DataReader

C# - Acessando e Obtendo Dados Com DataReader

|Views: 313|Likes:
Publicado porEfg Gouveia

More info:

Published by: Efg Gouveia on Jul 12, 2012
Direitos Autorais:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

04/01/2015

pdf

text

original

C# - Acessando e obtendo dados com DataReader

Este artigo mostra como acessar um banco de dados e exibir as informações das tabelas usando ADO .NET, mais especificamente a classe DataReader. A classe DataReader fornece funções similares aos cursores SQL, os quais não são atualmente suportados na plataforma .NET. Dessa forma ela é usada para retornar um fluxo de dados e somente-para-frente e somente-leitura de uma fonte de dados de forma muito eficiente. Os DataReaders são apropriados quando você precisa simplesmente exibir o resultado de uma consulta em cenários onde as informações não precisam ser atualizadas nem persistidas através de múltiplas requisições. A classe DataReader é um componente ADO .NET que possui diversos componentes para acesso e manipulação de dados e que possui dois componentes principais:
• •

DataSet - o principal componente da arquitetura desconectada ADO .NET usado para acesso independente da fonte de dados; .NET Data Provider - inclui os objetos Connection, Command, DataReader e DataAdapter;

A seguir temos uma figura mostrando os componentes da arquitetura ADO .NET:

vb conforme o leiaute da figura abaixo: Os componentes usados a partir da ToolBox foram: • • • 1 TextBox . 2. O usuário informa na caixa de texto o nome completo ou parcial de um produto que deseja localizar e clica no botão para localizar. O código executa uma consulta SQL usando parâmetros e obtém um DataReader com as informações exibindo-as no ListBox. Abra o Visual C# 2010 Express e crie um novo projeto do tipo Windows Forms Application com o nome acesso_DataReader. Para criar o projeto deste artigo eu vou usar o Visual C# 2010 Express Edition (ele é gratuito). a utilização da classe DataReader em um projeto Windows Forms. 1 listBox .Neste exemplo eu vou acessar o banco de dados Northwind.lbProdutos O projeto vai funcionar assim: 1. .mdf do banco de dados SQL Server e exibir informações em um projeto Windows Forms usando a linguagem C#.txtProduto. Vamos definir a interface com o usuário no formulário form1. No exemplo deste artigo vamos criar uma interface que permite que usuários efetuem consultas na tabela Products do banco de dados Northwind usando uma consulta com parâmetros e a classe DataReader. 1 Button . Este é um artigo para iniciantes e aborda o acesso a dados.btnLocalizar.

System. System.Config que é exibido abaixo: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> . O namespace Configuration permite usarmos a classe ConfigurationManager para obter a string de conexão do arquivo App.ComponentModel.Data. Iniciamos definindo os namespaces usados no projeto: using using using using using using System. System. System. Os namespaces System.SqlClient.Data. SqlDataReader e a propriedade ConnectionState.Configuration. SqlCommand.A seguir temos a imagem mostrando a tela principal do programa exibindo informações dos produtos da tabela Products do banco de dados Northwind.Data e System. Observe que basta o usuário digitar um caractere para que produtos iniciados pelo caractere sejam exibidos e que também exibidos o total de produtos localizados para a consulta. System. Vejamos como podemos implementar o código para realizar tal tarefa.SqlClient nos dão acesso as classes de acesso a dados usadas no projeto : SqlConnection.Forms.Data.mdf.Windows.

Em seguida selecione na aba .Config usando a classe ConfigurationManager. Crie a rotina getConexaoBD no formulário form1 que vai obter a string de conexão do arquivo App. Agora vamos definir as variáveis objeto usadas no projeto declarando-as logo após no início do formulário form1:: SqlDataReader rdr = null.</configSections> <connectionStrings> <add name="acesso_DataReader.Connect Timeout=30.Settings.Integrated Security=True. SqlConnection con = null.NORTHWNDConnectionString" connectionString="Data Source=. SqlCommand cmd = null.User Instance=True" providerName="System.NET a opção System.MDF.Properties.SqlClient" /> </connectionStrings> </configuration> Além de definir o namespace devemos incluir uma referência no projeto a System.\SQLEXPRESS.Configuration e clique Ok.AttachDbFilename=C:\dados\NORTHWND. criar uma nova conexão e retorna a conexão criada: .Data.Configuration para isso clique com o botão direito do mouse sobre o nome do projeto e selecione Add Reference.

cmd = new SqlCommand(sql).ConnectionStrings["acesso_DataReader. con.Data.Connection = con. } No evento Click do botão para localizar produtos .Add(rdr["ProductID"]. cmd.Settings. // o nome do produto System.NVarChar. } //exibe o total de registros obtidos lbltotal.private SqlConnection getConexaoBD() { //obtem a string de conexão do App. // o tipo do parametro 20.Parameters["@nomeProduto"].Value = txtProduto.Text + "%".ToString() + " ." + rdr["ProductName"].Items. // o nome da coluna // Preenche o parametro com o valor obtido do campo texto cmd. EventArgs e) { try { con = getConexaoBD().ConnectionString. // define o command com a consulta dada e associa a conexão string sql = "SELECT ProductID. ProductName.Add(new SqlParameter( "@nomeProduto".Open().Text = nuReg.ToString() + " Produtos". //percorre o leitor e exibe os valores no listbox while (rdr.ToString() + " . } catch (Exception ex) { // mensagem de erro .Clear().Read()) { lbProdutos. // o tamanho do parametro "ProductName")). return new SqlConnection(strConexao). // limpa o listbox lbProdutos.Properties. //define o total de registros como zero int nuReg = 0.Parameters. // define o parâmetro cmd.NORTHWNDCo nnectionString"].ExecuteReader().SqlDbType." + rdr["UnitPrice"]. defina o seguinte código: private void btnLocalizar_Click(object sender.Config e retorna uma nova conexao string strConexao = ConfigurationManager. ao lado da caixa de texto. UnitPrice" + " FROM Products" + " WHERE (ProductName LIKE @nomeProduto)" + " ORDER BY ProductID". nuReg++.ToString()). // Executa a cosulta rdr = cmd.Items.

} finally { // fecha os objetos datareader e connection if (rdr != null) rdr.State == ConnectionState.MessageBox.Definimos uma instrução SQL para retornar o código. if (con.Open) con.Obtemos uma nova conexão usando a função getConexaoBD() e a abrimos: con = getConexaoBD().. abc // define o command com a consulta dada e associa a conexão string sql = "SELECT ProductID. Josué. Josimar. Aqui criarmos uma consulta parametrizada onde o parâmetro foi definido como @nomeProduto. } } Vamos entender o código usado: 1. nome e preço do produto onde o nome do produto deverá ser igual ao nome informado pelo usuário.Close(). Através da inserir as letras desejadas e a SQL fará uma busca parcial pela string informada: Algo como: SELECT nome FROM tblalunos WHERE nome LIKE "Jos%" Isto retornará os possíveis nomes: José . 2. Note que usamos o sinal de porcentagem (%) que funciona como um coringa . bBb. bccccB b%b Caractere especial Múltiplos caracteres b[%]b ab% b%b abcdefg. A seguir listamos abaixo as principais ocorrências : Tipo de ocorrência Padrão utilizado na Consulta SQL O retorno da Pesquisa Múltiplos caracteres bb. substituindo os demais caracteres. Note o sinal @ no início do nome.Close(). ProductName. etc.. con. ou você pretende realizar uma busca mais irres usar a cláusula LIKE.Message). Josias. UnitPrice" + " FROM Products" + . Supondo que desejamos filtrar todos os alunos que tenham o nome começado pelas letrar Jos.Show(ex. A cláusula LIKE permite efetuar uma consulta irrestrita: Usando a cláusula LIKE As vezes os dados que você está desejando filtrar não têm uma ocorrência exata.Open().

ExecuteReader(). e preenchemos o controle ListBox com as informações obtidas: // Executa a cosulta rdr = cmd. tipo de dados. tamanho e nome da coluna sobre o qual irá atual e incluímos na coleção Parameters: // define o parâmetro cmd. // o tipo de dados do parametro 20.Definimos o parâmetro a ser usado .Text + "%" Ao definir o valor do parâmetro obtemos o valor informado na caixa de texto txtProduto e acrescentamos o curinga '%' a final do texto digitado para ser usado com a cláusula LIKE que já explicamos acima.Read()) { .Clear(). cmd. 4. //define o total de registros como zero int nuReg = 0. // o tamanho do parametro "ProductName")).Add(new SqlParameter( "@nomeProduto".Data. 3." WHERE (ProductName LIKE @nomeProduto)" + " ORDER BY ProductID". // limpa o listbox lbProdutos. cmd = new SqlCommand(sql).Parameters.SqlDbType.Items. // o nome do produto System.Parameters["@nomeProduto"].Executamos a consulta obtendo um DataReader (rdr). seu nome.Connection = con.Value = txtProduto.NVarChar. //percorre o leitor e exibe os valores no listbox while (rdr. // o nome da coluna // Preenche o parametro com o valor obtido do campo texto cmd. Definimos um objeto Command para a instrução sql definida e especificamos a conexão onde o comando será usado.

ToString() + " . Execute uma consulta SELECT COUNT(*) primeiro. Quando você usa a classe SqlDataReader ou OleDbDataReader . C# .zip C# . use um dos seguintes métodos: • • Conte os registros enquanto você percorrer o leitor.ADO . Para obter o total de registros tivemos que usar um artifício.Selecionando dados com SQL Seção C# do site . Para melhorar o código sugiro que você crie uma camada e remova o código de acesso a dados do formulário usando as boas práticas. simples assim." + rdr["ProductName"]. Referências: • • • • acesso_DataReader.." + rdr["UnitPrice"]. Para contornar este problema. } //exibe o total de registros obtidos lbltotal.ToString()).Add(rdr["ProductID"]. mas eu gosto.ToString() + " Produtos". Dessa forma cumprimos nosso objetivo e obtemos os registros desejados usando um DataReader. nao existe nenhuma propriedade RecordCount para indicar quantos registros estão sendo obtidos O objeto DataReader ou a fonte de dados geralmente sabe quantos registros estão sendo obtidos até que o último registro seja enviado para o cliente. Simples.DataReader C# .NET para iniciantes .Preenchendo um DataGridView SQL .. Observe que essa consulta pode ser desatualizada quando que terminar de ler os dados. nuReg++... Pegue o projeto completo aqui: Eu sei é apenas C#.lbProdutos.ToString() + " .Text = nuReg.Items.

You're Reading a Free Preview

Descarregar
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->