Você está na página 1de 35

Neste artigo eu vou mostrar (novamente) como gerenciar um banco de dados MySQL efetuando as operaes de acesso, seleo, incluso

, alterao e excluso usando a linguagem C# e ADO .NET. Vamos trabalhar usando a arquitetura em 3 camadas definindo assim:

A camada de interface : UI - namespace UI A camada de negcios : BLL - namespace BLL e classe produtoBLL A camada de acesso a dados : DAL - namespace DAL e classe produtoDAL

Vamos tambm criar a entidade Produto que ser o objeto do nosso negcio e que possuir 3 propriedades: ID, Nome e Preco representando assim cada coluna da tabela Estoque. A entidade ter o namespace DTO e a classe Produto. Eu poderia criar 3 projetos distintos mas para simplificar vou criar as seguintes classes :

produtoBLL - contm os mtodos das regras de negcio; (namespace BLL) produtoDAL - Contm os mtodos para acesso a dados no MySQL; (namespace DAL) produto - contm a classe Produto; (namespace DTO) UI - representa a nossa aplicao Windows Forms;

Lembrando que em uma aplicao em 3 camadas temos uma hierarquia de chamadas onde : A UI chama a BLL que chama a DLL que por sua vez acesso os dados e retorna os objetos; Nunca dever haver uma chamada direta da UI para a DAL e viceversa.(Quando usamos os controles de acesso a dados vinculados no formulrio estamos fazendo o acesso direto da camada de interface para a DAL ou banco de dados o que no uma boa prtica.) As ferramentas usadas so:

Banco de dados MySQL 5.01; http://dev.mysql.com/downloads/mysql/5.1.html MySQL Administrator e MySQL Query Browse http://dev.mysql.com/downloads/gui-tools/5.0.html; MySQL Connector .NET 6.04; http://dev.mysql.com/downloads/connector/ SharpDevelop 3.0 ou Visual Studio C# 2008; http://www.icsharpcode.net/OpenSource/SD/Download / ou http://www.microsoft.com/express/vcsharp/

Se voc no possuir o MySQL e o Connector .NET para o MySQL dever efetuar o download e instalar. A instalao simples basta clicar no pacote e seguir as orientaes aceitando as configuraes padro. Veja a seguir a sequncia de telas principais da instalao:

1-tela inicial de instalao do MySQL

2-Selecione a opo Typical para instalao

3-Verifique o local onde os arquivos sero instalados

4-Marque a opo para configurar o MySQL

5-Marque a opo Standard Configuration

6-Marque a opo para instalar como um servio e fornea um nome para o servio. O nome padro MySQL

7-Informe uma senha ao usurio root

8-Clique no boto Execute para processar as opes definidas

Com os componentes instalados vamos efetuar as seguintes tarefas:


Criar um banco de dados no MySQL Chamado Cadastro e uma tabela chamada Estoque com os campos ID, Nome e Preco; Criar um novo projeto Windows Forms no Visual C# 2008 Express ou SharpDevelop;

Embora eu j tenha descrito como criar um banco de dados no MySQL usando MySQL Administrator vou resumidamente repetir os passos:

Abra o MySQL Admininistrator, e, na rea inferior esquerda, onde so exibidos os esquemas. clique com o boto direito e selecione a opo : Create New Schema; Na janela Create new Schema e informe o nome do banco de dados , no nosso caso, Cadastro, e tecle OK;

Clique sobre o esquema criado e selecione a opo Create New Table ou clique no boto Create Table; A seguir defina o nome da tabela como Estoque e defina os campos da mesma conforme a figura abaixo:

A seguir a partir do menu Tools selecione a opo MySQL Query Browse; Na janela do MySQL Query Browse digite a instruo INSERT INTO Estoque VALUES (',"Caderno", 1.23) e clique no boto Execute para incluir um registro na tabela. Repita a operao e inclua uma borracha com um valor de forma que ao efetuar uma instruo SELECT * FROM Estoque iremos obter o resultado abaixo;

Neste momento j temos o banco de dados Cadastro e a tabela Estoque com dois registros. Abra o SharpDevelop ou o Visual C# 2008 Express e crie um novo projeto do tipo Windows Application com o nome MySQL_C#; Devemos incluir a referncia ao Connector .NET para ter acesso as classes de acesso a dados do MySQL. Para isso clique sobre o nome do projeto e selecione a opo Add Reference; A seguir inclua uma referncia a dll do MySQL Connector .NET selecionando na pasta onde foi instalado e clicando no boto Abrir/Open;

No formulrio padro inclua um controle TabControl e defina dois TabPages:


TabPage1 - Text = Cadastro TabPage2 - Text = Lista tabControl1 - Appearence = FlatButtons (para obter a aparncia conforme a figura abaixo)

Na primeira TabPage inclua os seguintes controles:


3 controles Label 3 Controles TextBox :txtID, txtNome e txtPreco

5 controles Button : btnNovo, btnAltear, btnExcluir, btnExibir e btnProcurar

Na segunda TabPage inclua um controle DataGridView gdvProdutos. Acima vemos o leiaute do formulrio para cada TabPage. Vamos iniciar criando o arquivo de classe Produto.cs que ir representar a classe Produto, clicando no nome do projeto e selecionando a opo Add New Item; Na janela de templates selecione o template Class e informe o nome Produto.cs; A seguir defina o seguinte cdigo nesta classe onde estamos definindo 3 membros e 3 propriedades da nossa entidade Produto: using System; namespace DTO { public class Produto { int _id; String _nome; Decimal _preco; public int ID { get {return _id;} set {_id = value;} } public String Nome { get {return _nome;} set {_nome = value;} } public Decimal Preco { get {return _preco;} set {_preco = value;} } } }

Neste arquivo criamos a classe Produto e definimos os membros _id, _nome e _preco e as propriedades ID, Nome e Preco. Ela ser usada para transferncia de objetos entre as camadas de interface de negcio e de acesso a dados. Agora vamos criar o arquivo de classe DAL.cs clicando no nome do projeto e selecionando a opo Add New Item; Na janela de templates selecione o template Class e informe o nome DAL.cs; Os pacotes usados nesta classe so: using using using using using System; System.Collections.Generic; System.Data; MySql.Data.MySqlClient; DTO;

A seguir vamos definir na classe produtoDAL 6 mtodos conforme exibidos abaixo:


selectListProdutos - retorna uma lista de produtos : List<Produto> com os produtos selecionados; selectProdutos - retorna um DataTable com os produtos selecionados; selectProdutosByID - retorna uma entidade Produto para um produto selecionado pelo seu cdigo (id); insertProduto - inclui um novo produto; updateProduto - atualiza um produto existente; deleteProduto - exclui um produto existente;

Vejamos o cdigo da classe produtoDAL: Declaramos duas variveis que sero visveis na classe: String _conexaoMySQL = ""; MySqlConnection con = null; O construtor da classe ProdutoDAL define a string de conexo com o banco de dados MySQL:
public produtoDAL() { _conexaoMySQL = "server=localhost;user id=root;password=password;database=cadastro"; }

onde temos: server - localhost , pois estou acessando o MySQL instalado na minha mquina local; id = root , pois estou usando o usurio root;

password = password , pois essa foi a senha definida para o usurio root; database=cadastro, pois esse o banco de dados que criamos no MySQL; Agora vejamos os mtodos: 1- SelectProdutos - Usada para exibir todos os produtos do estoque;
public DataTable selectProdutos(){ try{ String sql = "SELECT * FROM Estoque"; con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); MySqlDataAdapter da = new MySqlDataAdapter(); da.SelectCommand = cmd; DataTable dt = new DataTable(); da.Fill(dt); return dt; } catch (Exception ex) { throw ex; } }

2- selecteProdutoByID() - Usada para retornar uma entidade Produto representando um nico produto pelo seu cdigo (id);
public Produto selectProdutoByID(int id) { try{ String sql = "SELECT * FROM Estoque WHERE id = @id"; con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); cmd.Parameters.AddWithValue("@id",id); con.Open(); MySqlDataReader dr; Produto produto = new Produto(); dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); while (dr.Read()) { produto.ID = Convert.ToInt32(dr["id"]); produto.Nome = dr["Nome"].ToString(); produto.Preco = Convert.ToDecimal(dr["Preco"]); } return produto; } catch (Exception ex) { throw ex; }

3- selectListProdutos() - Usada para retornar uma lista de objetos Produto representando uma coleo de produtos.
public List<Produto> selectListProdutos() { try { using (MySqlConnection conn = new MySqlConnection(_conexaoMySQL)) { using (MySqlCommand command = new MySqlCommand("Select * from Estoque", conn)) { conn.Open(); List<Produto> listaProdutos = new List<Produto>(); using (MySqlDataReader dr = command.ExecuteReader()) { while (dr.Read()) { Produto produto = new Produto(); produto.ID = (int)dr["id"]; produto.Nome = (String) dr["Nome"]; produto.Preco = Convert.ToDecimal(dr["Preco"]); listaProdutos.Add(produto); } } return listaProdutos; } } } catch (Exception ex) { throw new Exception("Erro ao acessar estoque " + ex.Message); } }

4- insertProduto() - Usada para incluir um novo produto no estoque;


public void insertProduto(Produto produto){ try{ String sql = "INSERT INTO Estoque (nome,preco) VALUES (@nome,@preco)"; con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); cmd.Parameters.AddWithValue("@nome",produto.Nome); cmd.Parameters.AddWithValue("@preco",produto.Preco); con.Open(); cmd.ExecuteNonQuery(); } catch (Exception ex) {

throw ex; } finally{ con.Close(); } }

5- updateProduto() - Usada para atualizar os dados de um produto no estoque;


public void updateProduto(Produto produto){ try{ String sql = "UPDATE Estoque SET nome= @nome ,preco=@preco WHERE id = @id "; con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); cmd.Parameters.AddWithValue("@id",produto.ID); cmd.Parameters.AddWithValue("@nome",produto.Nome); cmd.Parameters.AddWithValue("@preco",produto.Preco); con.Open(); cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally{ con.Close(); } }

6- deleteProduto() - Usada para excluir um produto no estoque;


public void deleteProduto(Produto produto){ try{ String sql = "DELETE FROM Estoque WHERE id = @id "; MySqlConnection con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); cmd.Parameters.AddWithValue("@id",produto.ID); con.Open(); cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally{ con.Close(); } }

Eu mantive o cdigo o mais simples possvel usando ADO .NET clssica e instrues SQL. Poderia ter usado stored procedures o que seria mais indicado. Esta a nossa camada de acesso a dados e sua responsabilidade e acessar e persistir dados no MySQL, s isso. Veja abaixo uma figura onde temos uma viso da nossa soluo:

Estamos usando a arquitetura em 3 camadas definida assim:


A camada de interface : UI - namespace UI A camada de negcios : BLL - namespace BLL e classe produtoBLL A camada de acesso a dados : DAL - namespace DAL e classe produtoDAL

Em uma aplicao em 3 camadas temos uma hierarquia de chamadas onde :

A UI chama a BLL que chama a DAL que por sua vez acesso os dados e retorna os objetos; Nunca dever haver uma chamada direta da UI para a DAL e viceversa.(Quando usamos os controles de acesso a dados vinculados no formulrio estamos fazendo o acesso direto da camada de interface para a DAL ou banco de dados o que no uma boa prtica.) Nosso projeto possui a seguinte estrutura:

produtoBLL - contm os mtodos das regras de negcio; (namespace BLL) produtoDAL - Contm os mtodos para acesso a dados no MySQL; (namespace DAL) produto - contm a classe Produto; (namespace DTO) UI - representa a nossa aplicao Windows Forms;

Onde j implementamos a classe produtoDAL na camada DAL. Vamos agora mostrar a definio da camada BLL onde temos a classe produtoBLL. A classe produtoBLL possui os seguintes mtodos:

DataTable selecionaProdutos() - retorna todos os produtos ; novoProduto(Produto produto) - inclui um novo produto; alteraProduto(Produto produto) - altera os dados de um produto; a excluiProduto(Produto produto) - exclui um produto; List<Produto> listaProdutos() - retorna uma lista genrica de produtos; Produto listaProdutoPorID(int id) - retorna um nico produto;

Conforme mostrado na figura a seguir:

Vejamos o cdigo da classe produtoBLL: Devemos declarar os seguintes namespaces nos imports: using using using using using System.Collections.Generic; System; DAL; DTO; System.Data;

Precisamos da referncia a camada DAL para acessar os mtodos da classe produtoDAL e da referncia a camada DTO para acessar as propriedades da entidade Produto. A referncia aGeneric deve-se ao fato de estarmos retornando uma lista genrica de produtos no mtodo listaProdutos(); O construtor da classe ProdutoBB esta vazio:
public produtoBLL() {}

Agora vejamos os mtodos:

1- selecionaProdutos() - retorna um datatable com todos os produtos usando o mtodo selectProdutos() da camada DAL;
public DataTable selecionaProdutos() { DataTable tb = new DataTable(); try{ dal = new DAL.produtoDAL(); tb = dal.selectProdutos(); } catch (Exception ex) { throw ex; } return tb; }

2- listaProdutoPorID() - Usada para retornar uma entidade Produto representando um nico produto pelo seu cdigo (id) atravs do mtodo selectProdutoByID() da camada DAL;
public Produto listaProdutoPorID(int id) { try{ dal = new produtoDAL(); return dal.selectProdutoByID(id); }catch (Exception ex) { throw ex; } }

3- listaProdutos() - Usada para retornar uma lista de objetos Produto representando uma coleo de produtos usando o mtodo selectListProdutos() da camada DAL;
public List<Produto> listaProdutos() { try{ dal = new produtoDAL(); return dal.selectListProdutos(); }catch (Exception ex) { throw ex; } }

4- novoProduto(Produto produto) - Usada para incluir um novo produto no estoque usando o mtodo insertProduto() da camada DAL;
public void novoProduto(Produto produto){ try{ dal = new DAL.produtoDAL();

dal.insertProduto(produto); }catch (Exception ex) { throw ex; } }

5- updateProduto() - Usada para atualizar os dados de um produto no estoque atravs do mtodo updateProduto() da camada DAL;
public void alteraProduto(Produto produto){ try{ dal = new DAL.produtoDAL(); dal.updateProduto(produto); }catch (Exception ex) { throw ex; } }

6- deleteProduto() - Usada para excluir um produto no estoque via mtodo deleteProduto() da camada DAL;
public void excluiProduto(Produto produto){ try{ dal = new produtoDAL(); dal.deleteProduto(produto); }catch (Exception ex) { throw ex; } }

No estamos efetuando nenhuma validao de negcio nessas classes devido a simplicidade do exemplo mas em um sistema de produo aqui teramos as validaes referente ao negcio como restries de valores, clculo de impostos, descontos, etc. Dessa forma conclumos a definio do cdigo da nossa camada de negcios - BLL - atravs da implementao dos mtodos da classe produtoBLL.

Estamos usando uma arquitetura em 3 camadas definida assim:


A camada de interface : UI - namespace UI A camada de negcios : BLL - namespace BLL e classe produtoBLL A camada de acesso a dados : DAL - namespace DAL e classe produtoDAL A classe Produto que representa um produto do nosso domnio;

A nossa camada de interface ser uma aplicao Windows Forms que possui um formulrio onde atravs de um componente TabControl podemos obter uma viso com detalhes do produto e outra viso da relao dos produtos cadastrados conforme as figuras a seguir:

Para criar esta interface inclua o controle TabControl a partir da ToolBox e na sua propriedade TabPages clique no boto ao lado de Collection e defina duas TabPages definindo a propriedade nome da primeira- TabPage1- como sendo igual a Cadastro e da segunda TabPage2- como Lista:

Inclua o controle TabControl e defina a sua propr Appearence como igual a FlatButtons;

Na TabPage Cadastro inclua os seguintes controle partir da ToolBox:

- 3 Label - 3 TextBox - txtID , txtNome e txtPreco - 4 Button - btnNovo, btnAlterar, btnExcluir, btn

Na TabPge Lista inclua o componente DataGridVie gdvProdutos

Com isso temos a nossa interface pronta para ser usada. Fazemos isso acessando os dados da base MySQL e fazendo uma chamada a nossa camada de negcio (BLL) que por sua vez chama a camada de acesso a dados(DAL) que responsvel por recuperar e persistir informao na base de dados.

Vamos usar os eventos dos controles de formulrio Button para fazer a chamada a nossa classe de negcio. Para isso no incio do nosso formulrio devemos ter as seguintes referncias: using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using BLL; using DTO; Note que temos que ter uma referncia a camada de negcios BLL a nossa camada DTO - Data Transfer Object, onde definimos a classe Produto. Vamos comear com o evento Click do boto Exibir que ir exibir os dados na TabPage Lista em um DataGridView;

void BtnExibirClick(object sender, EventArgs e) { try{ BLL.produtoBLL bll = new produtoBLL(); gdvProdutos.DataSource = bll.selecionaProdutos(); }catch (Exception ex){ MessageBox.Show(" Erro : " + ex.Message.ToString()); } }

Neste cdigo criamos uma instncia da classe ProdutoBLL() e em seguida usamos o mtodo selecionaProdutos() que ir retornar um DataTable e exibir os produtos no DataGridView. Vejamos agora o cdigo do evento Click do boto Novo :
void BtnNovoClick(object sender, EventArgs e)

{ Produto p = new Produto(); p.Nome = (String) txtNome.Text; p.Preco = Convert.ToDecimal(txtPreco.Text); try{ BLL.produtoBLL bll = new produtoBLL(); bll.novoProduto(p); } catch (Exception ex) { MessageBox.Show(" Erro : " + ex.Message.ToString()); } }

Primeiro criamos uma instncia da classe Produto e definimos as propriedades Nome e Preco atribuindo a elas os valores fornecidos pelo usurio atravs das caixas de texto txtNome e txtPreco. No precisamos informar o cdigo do produto(ID) pois o mesmo controlado pelo SGBD visto que definimos este campo como do tipo identity. A seguir criamos uma instncia da classe ProdutoBLL() no namespace BLL e em seguida usamos o mtodo novoProduto(p) para incluir um novo produto na base de dados. Observe que passamos como parmetro um objeto produto e no valores escalares. A seguir temos o cdigo associado ao evento Click do boto Alterar:
void BtnAlterarClick(object sender, EventArgs e) { Produto p = new Produto();

p.ID = Convert.ToInt32(txtID.Text); p.Nome = (String) txtNome.Text; p.Preco = Convert.ToDecimal(txtPreco.Text); try{ BLL.produtoBLL bll = new produtoBLL(); bll.alteraProduto(p); } catch (Exception ex) { MessageBox.Show(" Erro : " + ex.Message.ToString()); } }

Primeiro criamos uma instncia da classe Produto e definimos as propriedades ID, Nome e Preco atribuindo a elas os valores fornecidos pelo usurio atravs das caixas de texto txtID, txtNome e txtPreco. Aqui precisamos informar o ID do produto para identificar o produto a ser alterado. A seguir criamos uma instncia da classe ProdutoBLL() no namespace BLL e em seguida usamos o mtodo alteraProduto(p) para alterar um produto na base de dados. Observe que passamos como parmetro um objeto produto e no valores escalares. Vejamos agora o cdigo do evento Click do boto Excluir:

void BtnExcluirClick(object sender, EventArgs e) { Produto p = new Produto(); p.ID = Convert.ToInt32(txtID.Text); try{ BLL.produtoBLL bll = new produtoBLL();

bll.excluiProduto(p); } catch (Exception ex) { MessageBox.Show(" Erro : " + ex.Message.ToString()); } }

Primeiro criamos uma instncia da classe Produto e definimos a propriedade ID atribuindo a ela o valor fornecido pelo usurio atravs das caixas de texto txtID. A seguir criamos uma instncia da classe ProdutoBLL() no namespace BLL e em seguida usamos o mtodo excluiProduto(p) para excluir um produto na base de dados identificado pelo parmetro ID informado. Finalmente temos o cdigo do boto Procurar:
void BtnProcurarClick(object sender, EventArgs e) { int id = Convert.ToInt32(txtID.Text); Produto p = new Produto(); try{ BLL.produtoBLL bll = new produtoBLL(); p = bll.listaProdutoPorID(id); txtNome.Text = p.Nome; txtPreco.Text = p.Preco.ToString(); } catch (Exception ex) { MessageBox.Show(" Erro : " + ex.Message.ToString()); }
}

Neste cdigo obtemos o cdigo do produto (ID) a partir da caixa de texto txtID.Text. A seguir criamos uma instncia da classe Produto() e invocamos o mtodo listaProdutoPorIDusando o id obtido; por fim exibimos os dados do produto no formulrio. Com isso encerramos a nossa aplicao que acessa o MySQL usando uma arquitetura em camadas. Aplicamos os conceitos bsicos da orientao a objetos mas podemos ir alm, pois usamos na camada DTO uma classe anmica sem nenhuma inteligncia e no usamos o conceito de interface neste projeto. Deixo isso para voc como um exerccio.

Eu vou usar os seguintes recursos: 1- MySQL 5.0 (Comunity Server) - Baixe e instale usando as configuraes padro sugeridas pelo assistente de instalao; 2- MySQL Administrator e MySQL Query Browser - Baixe e instale usando o assistente; 3- SharpDevelop 2.2 ou Visual C# Express Edition Para efetuar a conexo usando C# vamos usar provedor ADO .NET para MySQL : 4- Download Connector/Net 5.1 (Podemos usar tambm a verso 5.2)

Criando o banco de dados e a tabela


Aps fazer o download e instalar as ferramentas indicadas vamos criar um novo banco de dados chamado Cadastro no MySQL. Abra o MySQL Administrator e clique em Catalogs; A seguir clique com o boto direito do mouse na rea onde so exibidos os banco de dados e selecione Create New Schema; Informe o nome do banco de dados e a seguir clique no boto Create Table; A seguir informe o nome da tabela Clientes e defina as colunas: id , nome, endereo e email conforme abaixo;

Para incluir alguns dados na tabela abra o MySQL Query Browser e digite a instruo INSERT INTO conforme figura abaixo e clique em Execute; INSERT INTO Clientes(nome,endereco, email) values ('Janice', 'Pa da Luz, 54', 'janice@bol.com.br') O campo id foi definido como chave primria e incremental de forma que o seu valor atribudo pelo MySQL;

Ao final teremos o banco de dados Cadastro e a tabela Clientes com alguns dados no MySQL. Estamos prontos para comear. Vamos agora criar uma nova soluo chamada MySQLExemplo usando o SharpDevelop. Abra o SharpDevelop e no menu Arquivo selecione Novo e em seguida Soluo;

Na janela Novo Projeto selecione C#->Aplicaes Windows e na janela Modelos marque Aplicao Windows e informe o nome da soluo , no meu caso: MySQLExemplo;

No formulrio padro MainForm.cs vamos incluir um controle DataGrid a partir da guia Data na janela de Ferramentas:

Na janela de cdigo vamos primeiro declarar os namespaces:


using System.Data; using MySql.Data.MySqlClient;

A seguir vamos incluir o cdigo para fazer a conexo com o banco de dados Cadastro no MySQL , acessar a tabela Clientes e exibir os seus dados no DataGrid;
public class MainForm : System.Windows.Forms.Form {

private System.Windows.Forms.DataGrid mDataGrid; private MySqlConnection mConn; private MySqlDataAdapter mAdapter; private DataSet mDataSet; public MainForm() { InitializeComponent(); //define o dataset mDataSet = new DataSet(); //define string de conexao e cria a conexao mConn = new MySqlConnection(" Persist Security Info=False;server=localhost;database=Cadastro;uid=root; server=localhost;database=Cadastro;uid=root;pwd=xxxx"); try{ //abre a conexao mConn.Open(); } catch(System.Exception e) { MessageBox.Show(e.Message.ToString()); } //verificva se a conexo esta aberta if (mConn.State == ConnectionState.Open) { //cria um adapter usando a instruo SQL para acessar a tabela Clientes mAdapter = new MySqlDataAdapter("SELECT * FROM Clientes", mConn); //preenche o dataset via adapter mAdapter.Fill(mDataSet, "Clientes"); //atribui a resultado a propriedade DataSource do DataGrid mDataGrid.DataSource = mDataSet; mDataGrid.DataMember = "Clientes"; } }

No cdigo acima eu vou falar um pouco sobre a string de conexo usada. Ele definida dessa forma para o provedor MySQL Connector/Net (.NET). mConn = new MySqlConnection( Persist Security Info=False; "Server=localhost;" + "DataBase=Cadastro;"+

"Uid=root;" + "Pwd=xxx;"); Um objeto MySqlConnection representa uma sesso para uma fonte de dados MySQL. Quando criamos uma instncia MySqlConnection todas as propriedades so definidas para os seus valores iniciais. A seguir temos os valores padro no construtor:
Propriedades
ConnectionString ConnectionTimeout Database DataSource ServerVersion

Valor Inicial empty string 15 empty string empty string empty string

("") ("") ("") ("")

O atributo Persist Security Info para uma string de conexo especifica se a fonte de dados pode persistir uma informao segura como as credenciais de autenticao do usurio. O valo padro mantido como False. Se Persist Security Info for definido como False e a conexo foi aberta , o valor retornado pela string de conexo no ir exibir a chave nem a senha. Se o valor for definido como True a informao da conexo incluindo a senha - pode ser obtida pela consulta a conexo , permitindo assim uma forma de acesso no confivel as informaes do usurio quando a conexo for persistida. A propriedade Server(DataSource) indica o nome ou endereo de rede da instncia do MySQL com o qual ser feita a conexo. Mltiplas instncias podem ser definidas separadas por &. A propriedade DataBase define o nome do banco de dados atual a ser usado aps a conexo ser aberta. Ela no atualizada dinamicamente, desta forma, se voc alterar o banco de dados usando uma instruo SQL poder ocorrer um erro. Para alterar o banco de dados use o mtodo ChangeDataBase para refletir o novo banco de dados. A propriedade Uid representa a conta que ser usada para acessar o MySQL.

A propriedade Pwd representa a senha da conta que esta sendo usada para o login no MySQL. Aps encerrar o trabalho com a conexo o objeto MySqlConnection no fechado, e , por isso voc deve fechar a conexo explicitamente chamando MySqlConnection.Close ou MySqlConnection.Dispose. Para fechar a conexo sobrescrevemos o mtodo Dispose conforme abaixo:
protected override void Dispose(bool disposing) { if (disposing) { if (mConn.State == ConnectionState.Open) { mConn.Close(); } } base.Dispose(disposing); }

Ao usar o comando Open o MySqlConnection tenta obter uma conexo a partir do pool de conexo , se no existir uma conexo disponvel, ser estabelecida uma nova conexo com uma instncia do MySQL. mConn.Open(); Ao executar o projeto iremos obter o seguinte resultado no controle DataGrid;

Este foi apenas uma pequena introduo ao acesso a dados com MySQL e C#. Aguarde em breve artigos mais avanados... Um bom estudo para voc... Pegue o projeto completo aqui: MySQLExemplo.zip

Você também pode gostar