Port mit SqlConnectionStringBuilder angeben?

8

Ich habe einen Haken gefunden. Ich muss die Portnummer für meine lokale Installation von SQL Server 2008 R2 angeben. Bis jetzt habe ich versucht, den SqlConnectionStringBuilder mit der Datenquelle zu verwenden, die als .\TESTSERVER, 1433 eingestellt wird, die durch die gesamte Dokumentation mich mit dem Server TESTSERVER auf Anschluss 1433 verbinden sollte (der Standard).

Die Verbindungszeichenfolge sieht folgendermaßen aus:

{Data Source=".\TESTSERVER, 1433";Initial Catalog=AdventureWorks;User ID=testuser;Password=MYPASSWORDHERE}

Allerdings bekomme ich einen Fehler, der wie folgt aussieht:

  

Beim Herstellen eines Verbindungs-SQL-Servers ist ein netzwerkbezogener oder instanzspezifischer Fehler aufgetreten. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass der SQL-Server so konfiguriert ist, dass er Remoteverbindungen zulässt. (Provider: TCP-Provider, Fehler: 0 - Es konnte keine Verbindung hergestellt werden, weil der Zielcomputer dies aktiv abgelehnt hat.

Beim Verifizieren der Verbindungszeichenfolge mit SqlConnectionStringBuilder.ToString() kommt es fast so heraus wie MSDN schlägt vor. Aus irgendeinem Grund werden NUR doppelte Anführungszeichen um die Datenquelle gelegt und sonst nichts. Dies kann jedoch nur der Debugger sein, der die äußeren Anführungszeichen entfernt, da er in einem string -Datentyp gespeichert ist. Ich habe auch überprüft, dass der SQL-Server zugänglich ist, ohne Angabe des Ports und es ist. Schließlich habe ich überprüft, dass der Server Remote-Verbindungen akzeptieren darf. Wenn man bedenkt, dass diese Instanz von SQL Server lokal unter Verwendung des Standardports installiert ist, und auf meinem Entwicklungscomputer konnte ich mir nicht vorstellen, warum ich einen Fehler wie diesen bekommen würde.

Liegt das daran, dass der SqlConnectionStringBuilder meinen Port mit seinem eigenen Port überschreibt? Muss ich aus irgendeinem Grund Ports auf meiner Firewall öffnen? Da es sich um eine vollständig lokale Installation handelt, sollte es keine Firewall-Probleme geben. Ich möchte die Verbindungszeichenfolge lieber nicht manuell erstellen. Nicht, dass es schwierig ist, es fügt nur eine Ebene der Komplexität zu meinem Code hinzu, die ich lieber nicht haben würde, wenn sie nicht benötigt wird.

Jede Hilfe wäre willkommen. Danke!

BEARBEITEN:

Nach langem Suchen durch die SqlConnectionStringBuilder-Syntax scheint es, dass es ungültige Parameter behandelt, indem es dann an die in Anführungszeichen eingeschlossene Verbindungszeichenfolge übergibt. Ich könnte mir vorstellen, dass dies daran liegt, dass die Verbindungszeichenfolge unterbrochen wird. Meine Frage bleibt immer noch: Gibt es eine Möglichkeit, Port über SqlConnectionStringBuilder zu übergeben oder muss ich es selbst erstellen?

    
David W 02.07.2012, 07:54
quelle

4 Antworten

3

TL; DR

Entfernen Sie das Leerzeichen vor der Portnummer in der Datenquellenzeichenfolge:

%Vor%

und lass es so aussehen

%Vor%

Lange Antwort

Nach ein wenig Herumspielen können Sie die zusätzlichen Anführungszeichen weglassen, indem Sie das Leerzeichen zwischen dem Komma und der Portnummer entfernen:

%Vor%

Leider führt dies immer noch zur selben Fehlermeldung wie die von Ihnen angegebene. Also habe ich einen tieferen Einblick in die Netzwerkkommunikation bekommen und herausgefunden, dass, wenn Sie keine Portnummer eingeben, diese zuerst eine TCP Verbindung zu Port 1433 versucht (wie immer), aber sie wird nicht verbunden bleiben. Dann versucht es eine UDP-Verbindung zu Port 1434 und empfängt von ihrer eine dynamische Portnummer, die für eine zweite Tcp-Verbindung verwandt wird, in der die Daten fließen werden.

Wenn Sie Process Monitor von Sysinternals verwenden, können Sie diesen Prozess beobachten:

%Vor%

Wenn ich die Port-Nummer von Explizit verwende, sehe ich nur die ersten gegebenen Zeilen und danach wird die Ausnahme ausgelöst. Die Definition der Standardportnummer führt zu einem anderen Verhalten als die Definition einer Portnummer!

Wenn Sie jedoch eine explizite Portnummer für Ihren Server definieren müssen, vermeiden Sie einfach das Leerzeichen nach dem Komma und Ihre Verbindungszeichenfolge sieht hübsch aus.

    
Oliver 05.11.2012 09:24
quelle
0

Schauen Sie sich einfach die Ссылка

an

Die SQL Server 2008-Verbindungszeichenfolge enthält keine zusätzlichen Anführungszeichen um den Server-Namen. Ihre Verbindungszeichenfolge sollte

sein %Vor%     
Franziee 02.07.2012 08:27
quelle
0

MSDN SqlConnection.ConnectionString-Eigenschaft

Der Name oder die Netzwerkadresse der SQL Server-Instanz, zu der eine Verbindung hergestellt werden soll. Die Portnummer kann nach dem Servernamen angegeben werden:

Beispiel: MyDataSource, 1433

    
jug 05.11.2012 08:27
quelle
0

Für mich funktioniert das so:

%Vor%     
Gorodeckij Dimitrij 24.07.2014 14:34
quelle