CONNESSIONE CON ODBC
Open Database Connectivity (ODBC) è una API (Interfaccia di Programmazione di
un'Applicazione) standard per la connessione ai DBMS. Questa API è indipendente dai linguaggi
di programmazione dai sistemi di database e dal sistema operativo.
ODBC è un'interfaccia nativa alla quale si può accedere tramite linguaggi che siano in grado di
chiamare funzioni di librerie native. Nel caso di Microsoft Windows, questa libreria è una DLL.
La prima versione è stata sviluppata su Windows; altre release sono state scritte per UNIX,
OS/2 e Macintosh.
In aggiunta al software ODBC, c'è bisogno di un driver specifico per poter accedere ad ogni
diverso tipo di DBMS. ODBC permette ai programmi che lo usano di inviare ai database
stringhe SQL senza che ci sia bisogno di conoscerne le API proprietarie. Genera
automaticamente richieste che il sistema di database utilizzato sia in grado di capire.
In tal modo, i programmi possono connettersi a diversi tipi di database utilizzando più o meno
lo stesso codice.
CONNESSIONI CON OLE-DB
Diversamente da come molti pensano, per la connessione a database in ASP non esiste solo
ODBC. Certamente è il metodo più usato e forse il più semplice da implementare abbinandolo
ai DSN, ma non è l'unico e neanche il più veloce. L'alternativa si chiama OLE-DB.
Come sapete l'ambiente ASP non è altro che un insieme di oggetti e componenti richiamati con
un linguaggio di scripting (Vbscript, Jsscript o altri). Uno di questi componenti è ADO (Activex
Data Object) che si occupa appunto della comunicazione con le sorgenti di dati (database), e
OLE-DB è appunto una parte di esso.
Per capire meglio come lavora OLE-DB all'interno di ADO bisogna aprire una parentesi sui
concetti di Data Consumer e Data Provider.
Data Consumer
Il Data Consumer è una qualunque applicazione che richiede dei dati per una successiva
elaborazione all'interno del proprio codice.
Nel nostro caso il Data Consumer è la pagina ASP in quanto si occupa della richiesta dei dati al
database per elaborarli successivamente.
Data Provider
In contrapposizione, il Data Provider, è colui che si occupa del dialogo diretto con il DB per
l'estrapolazione dei dati richiesti e che successivamente li passerà al Data Consumer. Nel
nostro caso il Data Provider è OLE-DB.
Esattamente come succede per l'ODBC (che è esso stesso un Data Provider) ogni database ha
bisogno di un suo OLE-DB specifico che ne conosca la struttura e che sappia come prendere i
dati.
In pratica sia OLE-DB che ODBC sono due Data Provider e superficialmente si potrebbe
pensare ad una equivalenza tra i due ma vedremo che non è così.
Perché usare OLE-DB al posto di ODBC.
Forse qualcuno ci rimarrà male dal non vedere ancora neanche una linea di codice, ma ciò
deriva dal fatto che le modifiche per utilizzare OLE-DB sono veramente esigue mentre la
filosofia che si basa dietro ai due mondi è completamente diversa ed è questa che bisogna
capire per apprezzare le differenze tra i due metodi.
OLE-DB è uno dei primi passi che la Microsoft ha fatto per implementare efficacemente la sua
strategia chiamata UDA (Universal Data Access).
Lo scopo di UDA è di rendere accessibili, in modo uniforme, i dati provenienti non solo dai DB
ma anche da qualunque applicazione come Word, Excel, Outlook. Ci troveremo quindi in un
futuro molto prossimo a collegare non solo database ma qualunque applicazione OLE-DB
compatibile.
Dal canto suo la Microsoft sta spingendo molto per raggiungere la massima diffusione di UDA e
vedrete che in poco tempo ogni applicazione avrà il suo bel driver OLE-DB esattamente come
adesso ha quello ODBC.
Se pensate che questo non sia abbastanza per abbandonare i vostri vecchi metodi di
programmazione tenetevi forte perché la tabella che segue vi sbalordirà più di 1000 parole:
CONFRONTO PRESTAZIONI - ACCESS
OLE-DB
ODBC (DSN)
Tempo di connessione
18
82
Tempo di iterazione su 1000 Record
2900
5400
OLE-DB
ODBC (DSN)
Tempo di connessione
62
99
Tempo di iterazione su 1000 Record
100
950
CONFRONTO PRESTAZIONI - SQL server
Nota: questi risultati sono tratti dalle pagine 232 e 233 del libro: ADO 2.0 Programmer's
Reference edito dalla Wrox. I tempi sono espressi in millisecondi e le iterazioni attraverso i 100
record sono calcolate usando cursori server-side. (C'è una minore differenza di prestazioni fra
OLE-DB e ODBC usando i cursori Client-side)
Usare OLE-DB
Siamo arrivati finalmente alla parte forse più attesa, dove vedremo come effettuare la
connessione OLE-DB rispetto a quella ODBC.
Il codice che segue funziona solo con la versione 2.0 o superiore di ADO. Se si sta usando una
vecchia versione (vedi tabella) si può scaricare gratuitamente l'aggiornamento alla pagina
http://www.microsoft.com/data
Prodotto
?include?.
IIS 3.0
ASP 1.0 e ADO 1.0
IIS 4.0, PWS 4.0, NT4 Option pack
ASP 2.0 e ADO 1.5
Windows '98
ASP 2.0 e ADO 1.5
Visual Studio 6.0
ADO 2.0
Office 2000, IE 5.0
ADO 2.1
Windows 2000, IIS 5.0
ASP 3.0 e ADO 2.5
Guardate il seguente pezzo di codice:
<%
Dim objRS
Dim strConnect
StrConnect = "Driver={Microsoft Access Driver (*.mdb)};
DBQ=c:\inetpub\wwwroot\?\nome_db.mdb"
Set objRS = Server.CreateObject(ADODB.Recordset)
objRS.Open "Nome_tabella" , strConnect , <tipo di cursore>,<tipo di lock>
%>
Questo è quello che avete sempre fatto per aprire una connessione ODBC (in questo caso con
il driver di Access).
Per connettersi con OLE-DB l'unica modifica che dovete fare è cambiare la stringa strConnect
come segue.
Connettere Access
StrConnect = "Provider = Microsoft.Jet.OLEDB.4.0;
Data Source = C:\inetpub\wwwroot\?\nome_db.mdb;
Persist Security Info = False"
Connettere SQL server
StrConnect = "Provider = SQLOLEDB;
Data Source = nome_della_macchina_server;
Database = nome_del_db;
User ID = user_id; Password=password"
Da notare come, similarmente all'ODBC, la sintassi della stringa di connessione varia da un DB
all'altro.
Essenzialmente può essere composta da:
Provider: Il tipo di provider OLE-Db usato per la connessione
Initial File Name o Data Source: Il path fisico del DataBase (compreso il nome del file)
Initial Catalog: Il nome del database
User ID: L'user name necessario per la connessione
Password: La password per il nome utente specificato
Persist Security Info: E' una variabile boolean che se messa a True dice a Windows di ricordare
la password per noi.
Che corrispondono in ODBC:
ODBC
OLE-DB
Driver
Provider
Dbq
Initial File Name o Data Source
Uid
User ID
Pwd
Password