La Spécification De Port Avec SqlConnectionStringBuilder?
J'ai couru un hic. J'ai besoin de spécifier le numéro de port pour mon local d'installation de SQL Server 2008 R2. Jusqu'à présent, j'ai essayé d'utiliser le SqlConnectionStringBuilder avec la source de données définie comme .\TESTSERVER, 1433
, qui, par l'ensemble de la documentation doit me connecter au serveur TESTSERVER sur le port 1433 (valeur par défaut).
La chaîne de connexion ressemble à:
{Data Source=".\TESTSERVER, 1433";Initial Catalog=AdventureWorks;User ID=testuser;Password=MYPASSWORDHERE}
Mais j'ai une erreur qui ressemble à:
Un lié au réseau ou spécifique à l'instance erreur s'est produite lors de l'établissement d'une connexion à SQL server. Le serveur n'a pas été trouvé ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL server est configuré pour autoriser les connexions à distance. (Fournisseur: fournisseur TCP, erreur:0 - aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusé.
Lors de la vérification de la chaîne de connexion à l'aide de SqlConnectionStringBuilder.ToString()
il sort presque comment MSDN suggère. Pour une raison quelconque, il encapsule des guillemets UNIQUEMENT autour de la source de données et rien d'autre. Cependant ce n'est peut-être le débogueur retrait de la dehors des guillemets car il est stocké dans un string
type de données. J'ai aussi vérifié que SQL server est accessible sans spécifier le port et il est. Enfin, j'ai vérifié que le serveur est autorisé à accepter les connexions à distance. Compte tenu de cette instance de SQL Server est installé localement, en utilisant le port par défaut, et sur mon ordinateur de développement, je ne pouvais pas imaginer pourquoi j'ai une erreur de ce genre.
Est-ce parce que la SqlConnectionStringBuilder est primordial à mon port avec port? Dois-je pour quelque raison ouvrir des ports sur mon pare-feu? En sachant qu'il est entièrement d'installation locale, il ne devrait pas rencontrer de problèmes de pare-feu. Je préfère ne pas avoir à créer manuellement la chaîne de connexion. Non pas que c'est difficile, ça ajoute une couche de complexité à mon code, je préfère ne pas avoir sauf si nécessaire.
Toute aide serait appréciée. Merci!
EDIT:
Après une longue et difficile de creuser par le biais de la SqlConnectionStringBuilder syntaxe, il semble qu'il gère les paramètres non valides en passant ensuite à la chaîne de connexion entouré par des guillemets. J'imagine que c'est parce qu'il rompt le connectionstring. Ma question demeure: est-il un moyen de passer le port via SqlConnectionStringBuilder ou vais-je devoir construire moi-même?
Il échoue également avec n'importe quelle combinaison de
127.0.0.1, 1433
, localhost, 1433
, etc. Le truc, c'est de la pensée, je suis en utilisant SqlConnectionStringBuilder
qui est de l'ajout de la cite SEULEMENT quand j'ai le dbname,port de la syntaxe de set sur le champ source de données. Si j'ai été la construction de la chaîne de connexion manuellement, il ne serait pas un problème.OriginalL'auteur David W | 2012-07-02
Vous devez vous connecter pour publier un commentaire.
TL;DR
supprimer l'espace avant le numéro de port dans votre source de données chaîne de caractères:
et laisser ressembler à ceci
Réponse Longue
Après un peu de jeu autour de vous pouvez omettre les guillemets supplémentaires en supprimant l'espace entre la virgule et le numéro de port:
Malheureusement, cela mène toujours le même message d'erreur comme celui que vous avez fournis. J'ai donc pris un regard plus profond dans la communication en réseau et de trouver, si vous ne passez pas d'un numéro de port, il tente d'abord une connexion tcp sur le port 1433 (comme d'habitude) mais il va rester déconnecté. Puis il tente une connexion udp vers le port 1434 et reçoit de leur dynamique numéro de port qui sera utilisé pour une seconde connexion tcp où les données de flux.
En utilisant le Moniteur de Processus de Sysinternals vous pouvez regarder ce processus:
En utilisant l'explicit numéro de port, je vais seulement voir les premières lignes donnée et par la suite l'exception est levée. Afin de définir le numéro de port par défaut conduit à un autre comportement que de ne pas définir le numéro de port!
Néanmoins si vous avez besoin de définir un numéro de port explicite pour votre serveur, il suffit d'éviter l'espace après la virgule et votre chaîne de connexion est jolie.
Espérant que cela rend les choses un peu plus claires.
En fait, c'est mieux que ma suggestion. 🙂
OriginalL'auteur Oliver
Il suffit de prendre un coup d'oeil à la http://www.connectionstrings.com/sql-server-2008
SQL Server 2008 chaîne de connexion ne contient pas de guillemets supplémentaires autour du serveur indtance nom. Votre chaîne de connexion doit être
OriginalL'auteur Franziee
MSDN SqlConnection.Propriété ConnectionString
Le nom ou l'adresse réseau de l'instance de SQL Server à laquelle se connecter. Le numéro de port peut être indiqué après le nom du serveur:
Exemple : MyDataSource,1433
OriginalL'auteur jug
Pour moi sa fonctionne comme ceci:
OriginalL'auteur Gorodeckij Dimitrij