2009-04-07 8 views
1

Ich verwende die MFC-Klassen-CD-Datenbank. Um eine Verbindung zu SQL Server herzustellen, rufe ich OpenEx() mit einer Verbindungszeichenfolge auf. Mein Problem ist, dass das Objekt den DSN-Teil der Zeichenfolge nicht zu interpretieren scheint. Die Verbindungszeichenfolge sieht wie folgt aus:Warum kann ich mein CDatabase-Objekt nicht dazu bringen, meinen Datenquellennamen zu verstehen?

ODBC;DSN=mySystemDSN;UID=myUsername;WSID=myMachineName;DATABASE=myDatabaseName;Trusted_Connection=Yes 

Das sollte Recht sein, weil ich es bekam von OpenEx (NULL) verwenden, um die Datenquelle manuell auswählen und dann GetConnect() aufrufen.

Aber diese Zeichenfolge scheint nicht genug Informationen zu enthalten: OpenEx() öffnet immer einen Dialog, der nach mehr fragt. Es scheint nicht wichtig zu sein, was ich aus diesem Dialog wähle - ich kann einen DSN auswählen, der einer völlig anderen Datenbank zugeordnet ist, und die Dinge funktionieren immer noch (ein Aufruf von GetConnect() zeigt, dass er meine Verbindungszeichenfolge mit Ausnahme des DSN verwendet Teil, der von der anderen Datenquelle ausgeliehen wird).

Ich brauche meine Anwendung automatisch mit der Datenbank verbinden zu können - Dialogboxen sind ein Deal-Breaker. Ich habe eine DSN-lose Verbindung mit ähnlichen Resultaten versucht. Was ist hier los und was kann ich dagegen tun?

bearbeiten in Antwort auf Neil Butterworths Frage:

Treiber: SQL Server
Name: MySystemDSN

Die Informationen, die ich zur Verfügung gestellt, wenn ich den DSN in dem ODBC-Datenquellen-Administrator wie folgt erstellt wurde
Server: myMachineName
Authentifizierungstyp (kann Windows oder SQL Server sein): Windows
checkbox "Mit SQL Server verbinden, um Standardeinstellungen für fo zu erhalten r die zusätzlichen Konfigurationsoptionen. ": tickte
Checkbox "die Datenbank Standard Wechseln Sie in": tickte und myDatabaseName aus der Drop-down gewählte Menü
Checkbox "Use ANSI Bezeichner in Anführungszeichen": tickte
Checkbox" ANSI-Nullen, Polsterungen und Warnungen ": angekreuzt
Checkbox" Übersetzung für Zeichendaten ausführen ": angekreuzt

Antwort

2

Ihnen scheint ein Passwort und der Hostname des Servers zu fehlen. Ich nehme an, die interessante Frage ist, welche Informationen Sie in den Dialog zur Erstellung des DSN eingegeben haben.

Bearbeiten: Sie können auch einen Blick auf this site werfen, die viele Verbindungszeichenfolge Beispiele hat.

Edit2: Ich würde die "ODBC;" am Anfang der Zeichenfolge. Wenn das nicht funktioniert, würde ich den Authentifizierungstyp im DSN zu SQL Server ändern und eine Benutzer-ID & Kennwort explizit angeben, nur um zu überprüfen, dass die Authentifizierung nicht das Problem ist. Und dann würde ich wahrscheinlich aufgeben :-)

+0

Diese Instanz von SQL Server ist für die Verwendung der Windows-Authentifizierung konfiguriert. Es erfordert kein Passwort. Denken Sie, ich sollte SQL Server neu konfigurieren? –

+0

Der Dialog ermöglicht Ihnen, zu einem vorhandenen DSN zu navigieren. Ich kann einen DSN für die falsche Datenbank auswählen und meine Abfragen werden weiterhin ausgeführt. Was muss ich zu meiner Verbindungszeichenfolge hinzufügen, wenn ich versuchen möchte, einen Hostnamen einzubeziehen? SERVER = myMachineName hilft nicht. –

+0

Wenn Sie Windows-Authentifizierung verwenden, müssen Sie sogar einen Benutzernamen angeben? Ich glaube, dass ich in meiner App bei der Arbeit nur den Namen des DSN angeben, und das bringt uns in. – Andy

0

Einige Optionen:

  • Ist es ein System oder Benutzer-DSN? Das heißt, ist der DSN für den ausführenden Benutzer sichtbar?
  • Versuchen die UID=myUsername
  • Versuchen Driver=ODBC statt ODBC

Entfernen Warum Sie einen DSN verwenden und nicht eine herkömmliche, in sich geschlossene Verbindungszeichenfolge? Wie Driver=SQLOLEBD;WSID=myMachineName;DATABASE=myDatabaseName;Trusted_Connection=Yes;

+0

Danke für die Checkliste, gbn. Es ist ein System-DSN, also sollte es sichtbar sein. Ich habe sowohl die von Ihnen vorgeschlagenen Änderungen als auch die DSN-lose Zeichenfolge, die Sie angeben, ausprobiert. Für DSN-lose Zeichenfolgen habe ich auch Driver = SQL Server und Driver = {SQL Server} versucht. –

1

Dank Neil Butterworth, fand ich eine Arbeits Antwort here:

"Driver = {SQL Server Native Client}; Server = myMachineName; Database = myDatabaseName; Trusted_Connection = yes;"

Ich bin immer noch verblüfft, warum Aufruf von GetConnect(), wenn die Verbindung funktioniert nicht eine perfekte DSN Zeichenfolge, aber jetzt, dass ich eine DSN weniger Lösung habe, ist mir egal, so viel!

0

zum Erstellen von Verbindungszeichenfolgen verwende ich www.connectionstrings.com. Fantastisch zum Erstellen von Verbindungszeichenfolgen für alle Varianten und Datenbank-Engines

Verwandte Themen