2009-05-11 27 views
8

Ich habe eine ältere VB6-Anwendung, die einen DSN basierend auf einem Parameter in einer Konfigurationsdatei erstellt. Der Parameter ist eine ODBC-Verbindung und die Verbindung hat einen Namen (DSN-NAME), der einen Server (DBSERVER) einem Treiber zuordnet ("SQL Server Native Client").Angeben eines Standardtreibers für ODBC

Im Allgemeinen ist es baut eine DSN wie folgt aus:

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

Wenn ich einen Hostnamen in der Datei angeben, baut es ein Verbindungszeichenfolge, die sagt

DSN = DBSERVER; User = foo; Password = bar

Die Fehlermeldung gemeldet ist:

[Microsoft] [ODBC Driver Manager] Der Datenquellenname mir

kein Treiber Standard

Dies deutet darauf hin, dass es vielleicht eine Möglichkeit anzugeben, nicht gefunden und angegeben ein Standardtreiber, was bedeuten kann, dass ich nur den Servernamen in der Konfigurationsdatei angeben kann und nicht die ODBC-Verbindung erstellen muss.

(Ich bin mir bewusst, dass diese automatisch erstellt werden können, das ist nur für die Installation und um meine Neugier zu befriedigen).

Wie geben Sie einen Standardtreiber an? Wenn ich den Standardtreiber auf SQL Server Native Client setzen kann, kann ich dann DSN = DBSERVER sagen und verbinden?

Edit: der Punkt war, zu versuchen, dies zu tun, ohne die Verbindungszeichenfolge zu ändern. Alle Untersuchungen deuten darauf hin, dass dies nicht möglich ist, aber der Wortlaut des Dialogs legt nahe, dass dies der Fall sein könnte.

Antwort

1

Um einen Standardtreiber angegeben haben, verwenden Sie DRIVER = in der Verbindungszeichenfolge:

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

Der Treibername ist der Name, der für jeden Fahrer in der Systemsteuerung ODBC-Konfigurationstool angezeigt. Beachten Sie, dass Sie die Informationen angeben müssen, die normalerweise aus dem DSN stammen würden, in diesem Fall der Datenbankname.

+0

Danke, aber für mich ist das kein "Standard" -Treiber, das ist ein "benutzerdefinierter" Treiber. – crb

1

Sie können erreichen, was Sie wollen, indem Sie "; SERVER = dbserver" an Ihre Verbindungszeichenfolge anhängen.

In Ihrem DSN ist bereits ein Server angegeben, aber das SERVER-Schlüsselwort in Ihrer Verbindungszeichenfolge überschreibt das.

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

+0

Handlich, aber ich kann die Verbindungszeichenfolge nicht so sehr ändern, nur ändern, wie es erzeugt wird. Irgendwann hoffe ich, dass wir diese App neu schreiben, um DSN-lose Verbindungszeichenfolgen zu verwenden :) – crb

0

Verwenden Sie eine DSN-weniger Verbindungszeichenfolge ... es kann 'on the fly' erstellt werden, um genau Ihre Zwecke Hotel .... kein piddling mit odbcad32.cpl oder reg/INI-Dateien zu steuern/Konfigurieren Sie eine DSN erforderlich.

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

für Details

+0

Danke, aber das klärt meine Frage über einen Standardtreiber nicht auf. Die Verbindungszeichenfolge wird durch einen Code generiert, den ich nicht ändern kann. – crb

+1

Entschuldigung, ich missverstanden. Um zu klären, habe ich ein paar Follow-up-Fragen. Verwenden Sie ADO zum Herstellen einer Verbindung mit einer ODBC-Zieldatenbank? Ist diese Zieldatenbank immer SQL Server? Immer über Native Client verbunden? Sie möchten wissen, wie Sie den Standardtreiber in der OLEDB-Verbindungszeichenfolge und nicht den ODBC-DSN angeben? So in essense, möchten Sie ADO verwenden, einen OLEDB-Provider von ODBC angeben, zusätzliche Informationen in der Zeichenfolge OLEDB-Verbindung angeben, um das SQLServer-Ziel anzugeben? – CMB

+0

In diesem Fall ist es immer ja. Aber ich kann die generierte Verbindungszeichenfolge nicht ändern, sonst würde ich einfach SERVER = dbserver in sie setzen. – crb

3

hatte ich das gleiche Problem und reparierte sie durch den Admin-32-Bit-ODBC unter Verwendung eines 32-Bit-DSN zu erstellen, anstatt der 64-Bit-Server-Betreiber in Verwaltung der erstellt nur 64-Bit-DSN, die nicht funktionieren.

Der 32-Bit-ODBC-Manager befindet sich an C:\Windows\SysWOW64\odbcad32.exe

diesem Artikel "Data source name not found and no default driver specified" auf Corey Gilmore Blog.