Share via


Connessione a un'origine dati (ODBC)

Dopo avere allocato handle di ambiente e di connessione e avere impostato tutti gli attributi di connessione, l'applicazione si connette all'origine dati o al driver. È possibile utilizzare tre funzioni per connettersi:

  • SQLConnect

  • SQLDriverConnect

  • SQLBrowseConnect

Per ulteriori informazioni sull'esecuzione di connessioni a un'origine dati, incluse le diverse opzioni della stringa di connessione disponibili, vedere Utilizzo delle parole chiave delle stringhe di connessione con SQL Server Native Client.

SQLConnect

SQLConnect è la funzione di connessione più semplice. La funzione accetta tre parametri: un nome di origine dati, un ID utente e una password. Utilizzare SQLConnect quando questi tre parametri contengono tutte le informazioni necessarie per connettersi al database. A tale scopo, creare un elenco di origini dati utilizzando SQLDataSources, richiedere all'utente di specificare un'origine dati, un ID utente e una password, quindi chiamare SQLConnect.

SQLConnect presuppone che per connettersi a un'origine dati siano sufficienti un nome di origine dati, un ID utente e una password e che l'origine dati ODBC contenga tutte le altre informazioni necessarie per il driver ODBC per eseguire la connessione. A differenza di SQLDriverConnect e SQLBrowseConnect, SQLConnect non utilizza una stringa di connessione.

SQLDriverConnect

La funzione SQLDriverConnect viene utilizzata quando sono necessarie altre informazioni oltre al nome di origine dati, all'ID utente e alla password. Uno dei parametri per SQLDriverConnect è costituito da una stringa di connessione contenente informazioni specifiche del driver. È possibile utilizzare SQLDriverConnect anziché SQLConnect nei casi seguenti:

  • Per immettere informazioni specifiche del driver in fase di connessione.

  • Per specificare che il driver deve richiedere all'utente le informazioni di connessione.

  • Per connettersi senza utilizzare un'origine dati ODBC.

La stringa di connessione di SQLDriverConnect contiene una serie di coppie parola chiave/valore che specificano tutte le informazioni di connessione supportate da un driver ODBC. Ogni driver supporta le parole chiave ODBC standard (DSN, FILEDSN, DRIVER, UID, PWD e SAVEFILE) oltre a parole chiave specifiche del driver per tutte le informazioni di connessione supportate dal driver stesso. La funzione SQLDriverConnect può essere utilizzata per connettersi senza un'origine dati. Un'applicazione progettata, ad esempio, per eseguire una connessione senza DSN a un'istanza di SQL Server può chiamare SQLDriverConnect con una stringa di connessione che definisce l'ID di accesso, la password, la libreria di rete, il nome del server a cui connettersi e il database predefinito da utilizzare.

Quando si utilizza SQLDriverConnect, sono disponibili due opzioni per richiedere all'utente tutte le informazioni di connessione necessarie:

  • Finestra di dialogo dell'applicazione

    È possibile creare una finestra di dialogo dell'applicazione che richieda le informazioni di connessione e quindi chiami SQLDriverConnect con un handle di finestra NULL e il parametro DriverCompletion impostato su SQL_DRIVER_NOPROMPT. Queste impostazioni impediscono di aprire la finestra di dialogo del driver ODBC. Questo metodo viene utilizzato quando è importante controllare l'interfaccia utente dell'applicazione.

  • Finestra di dialogo del driver

    È possibile codificare l'applicazione per il passaggio di un handle di finestra valido a SQLDriverConnect e per l'impostazione del parametro DriverCompletion su SQL_DRIVER_COMPLETE, SQL_DRIVER_PROMPT o SQL_DRIVER_COMPLETE_REQUIRED. Il driver genera quindi una finestra di dialogo per richiedere all'utente le informazioni di connessione. Questo metodo semplifica il codice dell'applicazione.

SQLBrowseConnect

Come SQLDriverConnect, SQLBrowseConnect utilizza una stringa di connessione. Utilizzando SQLBrowseConnect, tuttavia, un'applicazione può costruire una stringa di connessione completa in maniera iterativa con l'origine dati in fase di esecuzione. In questo modo, l'applicazione può eseguire due operazioni:

  • Generare finestre di dialogo proprie per richiedere tali informazioni, mantenendo in tal modo il controllo sull'interfaccia utente.

  • Esplorare il sistema per individuare origini dati che possano essere utilizzate da un driver specifico, possibilmente in diversi passaggi.

    L'utente, ad esempio, potrebbe esplorare innanzitutto la rete per individuare i server e, dopo averne scelto uno, esplorare il server per individuare i database accessibili dal driver.

Quando SQLBrowseConnect completa correttamente una connessione, restituisce una stringa di connessione che può essere utilizzata in chiamate successive a SQLDriverConnect.

Il driver ODBC di SQL Server Native Client restituisce sempre SQL_SUCCESS_WITH_INFO in caso di esecuzione corretta di SQLConnect, SQLDriverConnect o SQLBrowseConnect. Quando un'applicazione ODBC chiama SQLGetDiagRec dopo avere ottenuto SQL_SUCCESS_WITH_INFO, può ricevere i messaggi seguenti:

  • 5701
    Indica che SQL Server ha inserito il contesto dell'utente nel database predefinito specificato nell'origine dati o nel database predefinito specificato per l'ID di accesso utilizzato nella connessione se l'origine dati non dispone di un database predefinito.

  • 5703
    Indica la lingua utilizzata nel server.

Nell'esempio seguente viene riportato il messaggio restituito in una connessione eseguita correttamente dall'amministratore di sistema:

szSqlState = "01000", *pfNativeError = 5701,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
       Changed database context to 'pubs'."
szSqlState = "01000", *pfNativeError = 5703,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
       Changed language setting to 'us_english'."

È possibile ignorare i messaggi 5701 e 5703, in quanto di natura esclusivamente informativa. Non è consigliabile, tuttavia, ignorare un codice restituito di SQL_SUCCESS_WITH_INFO, in quanto è possibile che vengano generati messaggi diversi da 5701 o 5703. Se, ad esempio, un driver si connette a un server che esegue un'istanza di SQL Server con stored procedure di catalogo non aggiornate, uno degli errori restituiti tramite SQLGetDiagRec dopo SQL_SUCCESS_WITH_INFO è il seguente:

SqlState:   01000
pfNative:   0
szErrorMsg: "[Microsoft][SQL Server Native Client]The ODBC
            catalog stored procedures installed on server
            my65server are version 06.50.0193; version 07.00.0205
            or later is required to ensure proper operation.
            Please contact your system administrator."

La funzione di gestione degli errori di un'applicazione per connessioni SQL Server deve chiamare SQLGetDiagRec fino a quando non viene restituito SQL_NO_DATA. La funzione deve quindi intervenire su qualsiasi messaggio diverso da quelli con codice pfNative 5701 o 5703.

Verifica dello stato della connessione

Il comportamento di SQL_ATTR_CONNECTION_DEAD e SQL_COPT_SS_CONNECTION_DEAD in SQL Server 2000 e versioni successive differisce dalle versioni precedenti. In SQL Server 2000 e versioni successive SQL_ATTR_CONNECTION_DEAD restituisce lo stato più recente della connessione, che può non coincidere con lo stato corrente. SQL_COPT_SS_CONNECTION_DEAD, tuttavia, esegue sempre una query sulla libreria di rete per determinare lo stato corrente della connessione.

Per distinguere tra tali comportamenti, a SQL_COPT_SS_CONNECTION_DEAD viene assegnato un nuovo valore nei file di inclusione di SQL Server 2000 e versioni successive. Le applicazioni che utilizzano questo attributo e che vengono compilate utilizzando le intestazioni di SQL Server 2000 e versioni successive restituiscono un errore (HY092, Identificatore di opzione o di attributo non valido) se eseguite utilizzando un driver di SQL Server versione 7.0. È consigliabile che l'applicazione verifichi la versione del driver utilizzato prima di chiamare SQLGetConnectAttr ed è preferibile utilizzare quindi SQL_ATTR_CONNECTION_DEAD al posto di SQL_COPT_SS_CONNECTION_DEAD se l'applicazione viene eseguita in un driver di SQL Server versione 7.0.

Vedere anche

Concetti