Conectando ODBC e MySQL com C Sharp
Autor: Luiz Renato | Publicado: 2015-07-25T18:58:00-03:00


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 &gt; Files &gt; New Solution &gt; C# &gt; 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.


<!-- HTML generated using hilite.me -->

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&nbsp;using&nbsp;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.&nbsp;
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&nbsp;Driver={MySQL ODBC 5.3 ANSI Driver};&nbsp; usando a String&nbsp;"Driver={MySQL ODBC 5.3 ANSI Driver};server=localhost;uid=root;pwd=root;Option=2"&nbsp;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&nbsp;


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&nbsp;ExecuteNonQuery(); Se for para ler você substitui por ExecuteReader(); através de um looping para poder obter dados da matriz table.



<!-- HTML generated using hilite.me -->

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 &lt; 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&nbsp;http://localhost/phpmyadmin/




OBS: O conector http://dev.mysql.com/downloads/connector/net/ adiquirido no site do MySQL não precisa do ODBC e torna mais rápido as conexões e execuções. O próximo será fazendo com conector MySQL.
Também será feito um tutorial semelhante para Java, em breve!
XAMPP download&nbsp;https://www.apachefriends.org/pt_br/download.html
SharpDevelop 4 download http://www.icsharpcode.net/OpenSource/SD/Download/#SharpDevelop4x



Até mais!! ;D