2009-05-11 9 views
8

Ho un'app legacy VB6 che crea un DSN basato su un parametro in un file di configurazione. Il parametro è una connessione ODBC e la connessione ha un nome (DSN-NAME) che associa un server (DBSERVER) a un driver ("SQL Server Native Client").Specificare un driver predefinito per ODBC

In generale, si costruisce un DSN come questo:

DSN = DSN-NAME; utente = foo; Password = bar

Se specifico un hostname nel file, si costruisce un stringa di connessione che dice

DSN = DBSERVER; utente = foo; password = bar

Il messaggio di errore riportato è:

[Microsoft] [Gestione driver ODBC] Nome origine dati non trovato e nessun driver predefinito specificato

Questo mi fa pensare che forse c'è un modo di specificare un driver predefinito, che può significare che posso specificare solo il nome del server nel file di configurazione e non è necessario creare la connessione ODBC.

(Sono consapevole che questi possono essere creati automaticamente, questo è solo per la semplice installazione, e per soddisfare la mia curiosità).

Come si specifica un driver predefinito? Se è possibile impostare il driver predefinito su SQL Server Native Client, posso quindi dire DSN = DBSERVER e connettersi?

Edit: il punto è stato quello di cercare di fare questo senza modificare la stringa di connessione. Tutte le ricerche suggeriscono che ciò non è effettivamente possibile, ma la formulazione del dialogo suggerisce che potrebbe essere.

risposta

1

Per specificare un driver predefinito, utilizzare DRIVER = nella stringa di connessione:

DRIVER=driver name here;DATABASE=mydb;USER=foo;PASSWORD=bar 

Il nome del driver è il nome che compare nello strumento di configurazione del Pannello di controllo ODBC per ogni driver. Nota che dovrai fornire le informazioni che normalmente provengono dal DSN, in questo caso il nome del database.

+0

Grazie, ma per me, questo non è un driver "predefinito", è un driver "specificato dall'utente". – crb

1

È possibile ottenere ciò che si desidera aggiungendo "; SERVER = dbserver" alla stringa di connessione.

C'è già un server specificato nel tuo DSN, ma la parola chiave SERVER nella tua connessione avrà la precedenza.

http://msdn.microsoft.com/en-us/library/ms715433(VS.85).aspx

+0

Handy, ma non posso modificare la stringa di connessione più di tanto, basta cambiare la modalità di generazione. Alla fine spero che riscriveremo quell'app per usare le stringhe di connessione senza DSN :) – crb

0

utilizzare una stringa di connessione senza DSN ... può essere creato 'al volo' esattamente Suite vostri scopi .... non di lana caprina con odbcad32.cpl o REG/ini file da controllare/configura un dsn richiesto.

vedi http://support.microsoft.com/kb/147875

per dettagli

+0

Grazie, ma questo non chiarisce la mia domanda su un driver predefinito. La stringa di connessione è generata dal codice che non posso cambiare. – crb

+1

Mi dispiace, ho frainteso. Per chiarire, ho un paio di domande di follow-up. Si sta utilizzando ADO per connettersi con un database di destinazione ODBC? Questo database di destinazione è sempre SQL Server? Sempre connesso tramite client nativo? Il tuo desiderio è sapere come specificare il driver predefinito nella stringa di connessione OLEDB e non il DSN ODBC? Quindi, in sostanza, si desidera utilizzare ADO, specificare un provider OLE DB di ODBC, fornire ulteriori informazioni nella stringa di connessione OLEDB per specificare la destinazione SQLServer? – CMB

+0

In questo caso, è sempre sì. Ma non posso cambiare la stringa di connessione generata, altrimenti metterei semplicemente SERVER = dbserver. – crb

3

Ho avuto lo stesso problema e riparato utilizzando l'amministratore ODBC a 32 bit per creare un 32 bit DSN invece dell'amministratore 64 bit in strumenti di amministrazione che crea solo DSN a 64 bit che non funzionano.

L'ODBC Manager a 32 bit si trova a C:\Windows\SysWOW64\odbcad32.exe

Si veda questo articolo "Data source name not found and no default driver specified" sul blog di Corey Gilmore.