Connessioni DSN-less e OLE DB by
neoAbbiamo visto come è possibile agganciarsi ad una qualsiasi fonte
dati attraverso ODBC. Sfortunatamente questa tecnica presenta un
difetto che la rende scomoda nel caso dell'hosting virtuale.
Infatti per accedere alla fonte dati è necessario crearla dal pannello
di controllo di windows, e solo un'amministratore può farlo (non
dimenticate che stiamo parlando di Windows NT). Quindi per ogni
nostra necessità saremo comunque interfacciati all'amministratore
e in ogni caso non avremmo nessuna possibiltà di agire in modo autonomo
per amministrare il database.
Per siti di piccole dimensioni il costo aggiuntivo di una connessione
ODBC non vale la pena.
Per siti a scopo commerciale una tale soluzione rischia di rivelarsi
ingestibile a causa delle scadenti prestazioni intrinseche a ODBC.
In nostro soccorso ci vengono due connessioni made in Microsoft.
- Connessione DSN-less
Ovvero connessione senza data source name. Applicabile solo
ai database di access, permette di accedere direttamente al
file mdb senza passare per il provider odbc. Questo sito sfrutta
tale tecnica per gestire le statistiche delle visite, il guestbook
ed il calcolo del codice fiscale.
- Connessione OLE db
Permette di accedere ad un database SQL Server 7, a patto che
sia visibile in rete e che sul server web sia installato il
relativo driver. Grazie a questa tecnica, il database ed il
server web possono essere anche a grande distanza.
La connessione avviene nel solito modo, dichiarando un'oggetto ADOdb.connection.
L'unica differenza è nella stringa di connessione.
Analizziamo prima quella relativa alla DSN-less.
Nella stringa di connessione va specificato il driver, il database
e la directory
fisica del nostro database.
strconn="driver={microsoft
access driver (*.mdb)}; dbq=miodatabase.mdb; defaultdir="+dir+"/
;"
Come avrete notato la defaultdir è passata come variabile. Questo
perché noi non sappiamo il percorso fisico della cartella dove è
contenuto il nostro database.
Per ovviare tale necessità basta invocare il metodo mappath dell'oggetto
server per memorizzare, prima di assegnare la variabile strconn,
in dir il percorso fisico.
La successione corretta per connettersi è quindi la seguente.
dir=server.mappath(".")
strconn="driver={microsoft access driver (*.mdb)}; dbq=miodatabase.mdb;
defaultdir="+dir+"/ ;"
A questo punto basta aprire la connessione nel solito modo.
dataconn.open strconn
Un piccolo appunto per gli utenti Windows 9x.
Poichè il server che ospiterà il vostro db sarà basato su Windows
NT ci sono buone possibilità che il disco sia partizionato con NTFS
(lo stesso vale per server basati su Windows 2000).
Tra i tanti vantaggi di questo file system c'è la possibiltà di
impostare i permessi di accesso sui singoli file.
Questo significa l'utente generico che accede da internet (chiamato
IUSR_NOMESERVER) potresbbe non avere i permessi di scrittura sul
database.
Pertanto se operate in scrittura sul database attraverso una pagina
ASP si potrebbe verificare il classico errore
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Operation must use an
updateable query.
Prima di impazzire sul codice da voi prodotto contattate l'amministratore
del server e fatevi impostare i privilegi di scrittura per l'utente
guest internet sul vostro file.
Passiamo ora alla connessione OLE DB.
Utilizza una stringa di connessione abbastanza complessa dove si
devono passare oltre al driver anche le informazioni sulla sicurezza
per collegarsi a SQL server.
strconn="Provider=SQLOLEDB.1;User
ID=WWW;password=websql;Initial Catalog=database;Data Source=SQLSERVER;Connect
Timeout=15"
Analizziamo in dettaglio la stringa.
Provider Indica il driver OLE DB da utilizzare per la connessione.
User ID In Sql Server 7 ogni accesso ai database necessita
dell'autenticazione. Per collegarsi è quindi necessario fornire
al provider l'user id per accedere al db.
Password Idem come sopra.
Initial Catalog A differenza di Access, Sql server è un server
di database. Può quindi contenere un grande numero di database.
Questo parametro serve a dire al provider quale database utilizzare.
Datasource È l'indirizzo del server di database. Può essere
fornito come nome WINS, nome DNS oppure come indirizzo IP.
Connect timeout Imposta il tempo in secondi entro il quale
il database deve restituire un timeout in caso di mancata risposta.
Quando si accede ad un database del genere si ha lo stesso tipo
di problematiche che si hanno con Windows NT.
Il database server puo' contenere diversi utenti con diversi livelli
di privilegio ed ogni utente (ad eccezzione dell'amministratore)
ha diritto di accesso solo su determinati database.
Avendo un client per Sql Server fornito nella versione di valutazione
120 giorni scaricabile dal sito di
microsoft
e fornendo al client gli stessi parametri della stringa di connessione
(ovviamente nella finestra di registrazione server), è possibile
amministrare il proprio database in locale in una comoda vista ad
albero.
Tutti i parametri illustrati sopra devono essere forniti dal Database
Owner o dall'amministratore del sistema.
La connessione avviene poi nel solito modo
dataconn.open strconn
Leggi commentiNumero commenti inviati: 0