Home / Programmazione / C# - Asp.NET / Connessione a database Informix con C# e ODBC
Mattepuffo

Connessione a database Informix con C# e ODBC

Connessione a database Informix con C# e ODBC

Argomento che da quanto ho visto in giro è ancora molto in voga, anche se praticamente i databse Informix sono destinati a estinguersi.

Nel mio caso specifico devo creare un sito intranet per l'azienda in Asp.NET.

Il database del nostro gestionale è Informix.

Il che rende tutto più complicato.

Ma vediamo come fare.

Prima di tutto dovete scaricare e installare l'IBM Informix Client SDK.

Questo è indispensabile!!

Una volta installato provate a creare una connessione tramite ODBC; per farlo andate in Start -> Pannello di controllo -> Strumenti di amministrazione -> Origini dati (ODBC).

Se tutto vi funziona potete anche provare a creare una macro su Excel e vedere se estraete i dati in modo corretto.

Una volta fatto questo create il vostro progetto in Visual Studio.

Diciamo che la classe che andremo a creare può essere usata sia in progetti desktop che web.

 

Io ho usato il pattern Singleton, voi potete metterla come volete:

using System;
using System.Text;
using System.Data;
using System.Configuration;
using System.Data.Odbc;

namespace XXL
{
    public class Dbmanager
    {
        private static OdbcConnection conn = null;

        private static Dbmanager instance;
        private Dbmanager() { }

        public static Dbmanager Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Dbmanager();
                }
                return instance;
            }
        }

        public OdbcConnection connection()
        {
            try
            {
                conn = new OdbcConnection();
                conn.ConnectionString = "Driver={IBM INFORMIX 3.82 32 BIT};" +
                    "Server=prova_net;" +
                    "Host=prova;" +
                    "Service=sqlturbo2;" + // REALE
                    "Protocol=onsoctcp;" + // REALE
                    "DataBase=dvprova;" +
                    "Uid=userprova;" +
                    "Pwd=pwd;";
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return conn;
        }

        public DataSet getCodiciClienti()
        {
            connection().Open();
            OdbcCommand cmd = new OdbcCommand();
            OdbcDataAdapter adapter = new OdbcDataAdapter();
            DataSet ds = new DataSet();
            try
            {
                cmd.CommandText = "SELECT codice_cli CODICE, rag_cli RAGIONE FROM clienti ORDER BY 1";
                cmd.Connection = conn;
                adapter.SelectCommand = cmd;
                adapter.Fill(ds);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                ds.Dispose();
                conn.Close();
            }
            return ds;
        }
    }
}

Il tutto sta nel metodo connetti, e nello specfico nella string di connessione:

  • Server è il nome dell'istanza del server sulla macchina
  • Host è il nome della macchina, o l'IP
  • Service è il nome del servizio, o della porta in ascolto
  • Protocol è il protocollo usato (ce ne stanno diversi)
  • DataBase è il database su cui effettuare le query
  • Uid è il nome utente
  • Password la password

Ovviamente i dati possono cambiare da macchina a macchina, e dipendo anche dal sistema operativo usato.

Quindi per sapere di preciso chiedete al sistemista di turno.

Vi ho segnato quali sono i dati reali che ho messo.

Per la connessione abbiamo usato un oggetto OdbcConnection e i derivati OdbcCommand e OdbcDataAdapter, con i quali riempiamo il DataSet.

Praticamente allo stesso modo che faremo con un db MySQL o SqlServer, cambiano "solo" gli oggetti usati.

A questo punto non rimane che richiamare il metodo e impostarlo come data source di un componente, ad esempio una GridView.