Escolar Documentos
Profissional Documentos
Cultura Documentos
Atendendo diversos pedidos vou publicar uma srie de artigos mostrando como efetuar o acesso a dados usando a linguagem C#. Para comear vou mostrar como preencher um controle DataGriView em uma aplicao Windows Forms. Vamos l... Para acompanhar os exemplos mostrados no artigo voc deve possuir instaladas as seguintes ferramentas: - Visual C# Express Edition ou o SharpDevelop 2.2 Eu vou comear usando o SharpDevelop 2.2 apenas para variar mas voc pode usar o Visual C# Express 2008.
Na janela Novo Projeto selecione C#->Aplicaes Windows e na janela Modelos marque Aplicao Windows e informe o nome da soluo , no meu caso: AcessoDadosC;
A partir da janela Ferramentas abra a guia Data e selecione o controle DataGridView arrastando-o para o formulrio e configurando sua propriedade Dock para Top. A seguir na guia Windows Forms arraste o controle Button para o formulrio e defina sua propriedade Dock para Botton. O resultado final voc v na figura abaixo:
Inclua agora o cdigo do boto C# associado ao evento Click do boto conforme abaixo: void Button1Click(object sender, EventArgs e) { //define a string de conexao com provedor caminho e nome do banco de dados string strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dados\\Cadastro.mdb"; //define a instruo SQL string strSql = "SELECT * FROM Clientes"; //cria a conexo com o banco de dados OleDbConnection con = new OleDbConnection(strProvider); //cria o objeto command para executar a instruao sql OleDbCommand cmd = new OleDbCommand(strSql, con); //abre a conexao con.Open(); //define o tipo do comando cmd.CommandType = CommandType.Text;
//cria um dataadapter OleDbDataAdapter da = new OleDbDataAdapter(cmd); //cria um objeto datatable DataTable clientes = new DataTable(); //preenche o datatable via dataadapter da.Fill(clientes); //atribui o datatable ao datagridview para exibir o resultado dataGridView1.DataSource = clientes; } Nota: Lembrando que temos que declarar os namespaces : using System.Data; using System.Data.OleDb; O cdigo acima esta todo comentado e retorna todos os dados da tabela Clientes exibindo-os no DataGridView conforme abaixo:
1- Obter quantas colunas existe na tabela; 2- Ler o nome de cada coluna e criar o cabealho no DataGridView; 3- Ler cada um dos registros e verificar qual o tipo de dados de cada uma das colunas; 4- Obter o valor da coluna usando o mtodo apropriado; Vamos incluir um novo controle Button no formulrio e digitar o cdigo abaixo no seu evento Click():
void Button2Click(object sender, EventArgs e) { //define a string de conexao com provedor caminho e nome do banco de dados string strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dados\\Cadastro.mdb"; //define a instruo SQL string strSql = "SELECT * FROM Clientes"; //cria a conexo com o banco de dados OleDbConnection con = new OleDbConnection(strProvider); //cria o objeto command para executar a instruao sql OleDbCommand cmd = new OleDbCommand(strSql, con); //abre a conexao con.Open(); //define o tipo do comando cmd.CommandType = CommandType.Text;
//obtem um datareader OleDbDataReader dr = cmd.ExecuteReader(); //Obtem o nmero de colunas int nColunas = dr.FieldCount; //percorre as colunas obtendo o seu nome e incluindo no DataGridView for (int i=0; i < nColunas; i++) { dataGridView1.Columns.Add(dr.GetName(i).ToString( ) ,dr.GetName(i).ToString());
} }
Note que repetimos o cdigo inicial sendo que o cdigo destacado em amarelo o cdigo novo. Executando a soluo e clicando no boto - Preencher com DataReader - iremos obter:
J temos os cabealhos das colunas no DataGridView criadas com os nomes das colunas da tabela Clientes falta percorrer os registros e preencher o controle. Para fazer isso devemos tomar os seguintes cuidados: - Quanto obtemos o dado de um coluna em um DataReader temos que especificar o tipo de dados pois a um mtodo para cada tipo de dados; assim em uma coluna do tipo Integer devemos usar o mtodo GetInt32() para obter o valor. - Ento temos que percorrer cada linha da tabela e verificar em cada coluna qual o tipo de dados para usar o mtodo adequado e obter o seu valor; - Para saber o tipo de dados de um coluna usaremos o mtodo GetFieldType() verificando se o mesmo uma string (System.String) ou um inteiro (System.Int32) ou uma data (System.Date) O cdigo que devemos incluir para obter o resultado esperado pode ser visto a seguir:
void Button2Click(object sender, EventArgs e) { //define a string de conexao com provedor caminho e nome do banco de dados string strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dados\\Cadastro.mdb"; //define a instruo SQL
string strSql = "SELECT * FROM Clientes"; //cria a conexo com o banco de dados OleDbConnection con = new OleDbConnection(strProvider); //cria o objeto command para executar a instruao sql OleDbCommand cmd = new OleDbCommand(strSql, con); //abre a conexao con.Open(); //define o tipo do comando cmd.CommandType = CommandType.Text; //obtem um datareader OleDbDataReader dr = cmd.ExecuteReader(); int nColunas = dr.FieldCount; for (int i=0; i < nColunas; i++) { dataGridView1.Columns.Add(dr.GetName(i).ToString() ,dr.GetName(i).ToString()); }
//define um array de strings com nCOlunas string[] linhaDados = new string[nColunas]; //percorre o DataRead while (dr.Read()) { //percorre cada uma das colunas for (int a =0 ; a < nColunas; a++) { //verifica o tipo de dados da coluna if (dr.GetFieldType(a).ToString() == "System.Int32") { linhaDados[a] = dr.GetInt32(a).ToString(); } if (dr.GetFieldType(a).ToString() == "System.String") { linhaDados[a] = dr.GetString(a).ToString();
}
}
}
O cdigo que foi includo esta destacado em amarelo. Executando o projeto iremos obter:
Embora aborde conceitos bsicos este artigo mostrou como podemos tratar os dados a partir de um DataReader exibindo-os em um DataGridView() usando C#. Pegue o projeto completo para SharpDevelop aqui: Referncias: Retrieving Data Using the DataReader DataSet x DataReader - Umna questo de desempenho ? ADO.NET - Obtendo quantos registros um DataReader vai retornar Preenchendo um DataTable com um DataReader DataReader ou DataSet ? ADO.NET - Uma viso geral : Objetos Connection
Jos Carlos Macoratti
AcessoDadosC.zip