sábado, 25 de julho de 2015

Conectando ODBC e MySQL com C Sharp

Posted by Luiz Renato on 18:58

Conectando e manipulando SQL com uma conexão global para qualquer Banco de Dados / Driver de gerenciadores que seguem o padrão ODBC(Open Database Connectivity). Usando apenas recursos necessários para realizar a interação.

Vamos lá!

Requerimentos:
  • Conhecimento básico de SQL
  • Conhecimento básico em C# Sharp (ou Java)
  • Orientação de Objetos(import/classes/métodos/funções).
  • Usar uma IDE (SharpDevelop/Visual Studio)
  • Gerenciador SQL ativado(Service) no Sistema para conectar a servidor localhost (Estou usando o MySQL do XAMPP).

Recomendações:
  • NET Framework 4.0
  • SharpDevelop 4
  • Windows 7/8 ou 10
  • XAMPP


  • Ativando o MySQL no Sistema Operacional para gerenciar dados SQL:

Ativando o Apache e o MySQL no XAMPP

  • Criando um novo projeto "Solução" em SharpDevelop 4 > Files > New Solution > C# > NET Framework 4.0/Applcation Console...

Criando Projeto no SharpDevelop 4

  • Após criar...

Pineira interface criada pelo modelo (Já configurado por mim)

  • Vamos apagando o que for desnecessário do modelo pré definido... Até ficar assim (pode copiar, é código):
  • Observe que eu estou usando um tema Monokai e o seu deve ser o padrão ou diferente.


using System;
using System.Data.Odbc;
//by Luiz R.
namespace ConectODBC
{
 class Program
 {
  public static void Main(string[] args)
  {
   try{
    
   }catch(Exception){
    
   }
   
   Console.ReadKey(true);
  }
 }
}

  • Observe que eu acrescentei using System.Data.Odbc; que é uma importação padrão,
  • Try/Catch será altamente importante porque o programa vai tentar executar dentro do bloco try, se ocorrer um erro fatal o programa não vai mostrar bugs nem travamentos, ele vai dar catch e dizer que ocorreu um problema. Exeption pode ser incrementada com uma variável pra armazenar o erro ex: (Exception Err), Err vai ser a variavel. 
  • Também temos o comando Console.ReadKey(true); para manter o console e ele não fechar rapidamente após as execuções.

using System;
using System.Data.Odbc;
//by Luiz R.
namespace ConectODBC
{
 class Program
 {
  public static void Main(string[] args)
  {
   try{
       OdbcConnection conn = new OdbcConnection("" +
                      "Driver={MySQL ODBC 5.3 ANSI Driver};" +
                      "server=localhost;" +
                      "uid=root;" +
                      "pwd=root;" +
                      "Option=2");
       conn.Open();
       OdbcCommand sql = conn.CreateCommand();
       Console.WriteLine("ODBC Conectado com sucesso...");
       /*
       TUDO daki pra baixo você faz o que quiser em SQL antes de dar Close();

       */
       conn.Close();
       }catch(Exception){
       Console.WriteLine("Erro ao tentar conectar ao ODBC");
       }
   
   Console.ReadKey(true);
  }
 }
}

  • Criei um objeto(conn) que estabeleceu uma conexão com meu gerenciador SQL(MySQL) através do Driver={MySQL ODBC 5.3 ANSI Driver};  usando a String "Driver={MySQL ODBC 5.3 ANSI Driver};server=localhost;uid=root;pwd=root;Option=2" para MySQL.

Não Testados:
  • A única diferença está na ai, por exemplo para SQL Server a string poderia ficar assim: "DRIVER=SQL Server Native Client 11.0;Trusted_Connection=Yes;SERVER=(localdb)\v11.0;Description=LocalDB;" Ou depende mo método de conexão se é via server host 
  • Microsoft Access "Driver={Microsoft Access Driver(*.mdb, *.accdb)};DBQ=C:\\Users\\Administrator\\Desktop\\New folder\\MatchDetails.accdb;"

Após isso, você abre Open(); e cria um outro objeto que vou chamar de sql para finalmente executar os comandos SQL. Observe que você manipula os comandos SQL através de CommandText e executa sempre com ExecuteNonQuery(); Se for para ler você substitui por ExecuteReader(); através de um looping para poder obter dados da matriz table.


using System;
using System.Data.Odbc;
//by Luiz R.
namespace ConectODBC
{
  class Program
  {
    public static void Main(string[] args)
    {
      try{
        OdbcConnection conn = new OdbcConnection("" +
                         "Driver={MySQL ODBC 5.3 ANSI Driver};" +
                         "server=localhost;" +
                         "uid=root;" +
                         "pwd=root;" +
                         "Option=2");
        conn.Open();
        OdbcCommand sql = conn.CreateCommand();
      
      //CRIANDO BANCO DE DADOS "TESTE" NO GERENCIADOR MYSQL
      
      try{
        sql.CommandText = "DROP DATABASE IF EXISTS TESTE;";
        sql.ExecuteNonQuery();
        sql.CommandText = "CREATE DATABASE IF NOT EXISTS TESTE;";
        sql.ExecuteNonQuery();
        sql.CommandText = "USE TESTE;";
        sql.ExecuteNonQuery();
        Console.WriteLine("Banco de dados criado com sucesso...");
      }catch(Exception){
        Console.WriteLine("Erro ao tentar criar banco de dados.");  
      }
      
      //CRIANDO TABELA "LOGIN" SE NÃO EXISTIR NO GERENCIADOR MYSQL/TESTE/?
      
      try{
        sql.CommandText = "CREATE TABLE IF NOT EXISTS LOGIN(" +
                "ID INT AUTO_INCREMENT PRIMARY KEY NOT NULL," +
                "NICK VARCHAR(15) NOT NULL," +
                "SENHA INT NOT NULL)";
        sql.ExecuteNonQuery();
        Console.WriteLine("Tabela criada com sucesso...");
      }catch(Exception){
        Console.WriteLine("Erro ao tentar criar tabela.");  
      }
      
      //INSERINDO DADOS NO MYSQL/TESTE/LOGIN
      
      try{
        sql.CommandText= "INSERT INTO LOGIN (NICK,SENHA) VALUES ('Dark',123456)";
        sql.ExecuteNonQuery();
        Console.WriteLine("Dados inseridos com sucesso...");
      }catch(Exception){
        Console.WriteLine("Erro ao tentar inserir dados.");
      }
      
      //IMPRIMINDO DADOS DA TABELA MYSQL/TESTE/LOGIN... NO CONSOLE :P
    
      try{
      sql.CommandText = "SELECT * FROM LOGIN;";
      OdbcDataReader get = sql.ExecuteReader();
      while (get.Read()){
        
        string dados = "";
        for (int i = 0; i < get.FieldCount; i++)
          dados += get.GetValue(i).ToString() + ", ";
        Console.WriteLine(dados);
      }
      
      }catch(Exception){
        Console.WriteLine("Erro ao tentar imprimir dados.");
      }
      
      conn.Close();
      
      }catch(Exception){
        Console.WriteLine("Erro ao tentar conectar ao ODBC");
      }
      
      Console.ReadKey(true);
    }
  }
}
Console do C# após executar o código acima.

  • Vamos confirmar no gerenciador:

Verificação do Gerenciador via Apache http://localhost/phpmyadmin/



Até mais!! ;D

0 comentários:

Postar um comentário

  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin

Procurar