IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C# - SQL SERVER 2005] Connexion à une base de données distante


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut [Résolu] [C# - SQL SERVER 2005] Connexion à une base de données distante
    Bonjour,

    Je me heurte depuis deux jours à un problème de connexion à un serveur SQL SERVER 2005, via C#.

    Je développe en fait une application C# de type Windows Forms pour un réseau d'entreprise. Jusqu'à présent, nous fonctionnions avec MySQL, et tout marchait à merveille, mais nous sommes passés à SQL SERVER 2005 Standard Edition. La base de données est installée sur le serveur du réseau d'entreprise. Ce serveur tourne sous Windows Server 2003 Enterprise Edition.

    Les postes clients accèdaient à la base de données MySQL sur le serveur simplement via l'adresse IP de ce dernier, le nom de la base de donnée, un login et un mot de passe. J'essaie d'appliquer le même principe avec SQL SERVER 2005, mais cela ne fonctionne pas, malgré des heures de recherche.

    En local, aucun problème, lorsque j'exécute l'application sur le serveur lui-même, tout se passe bien avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlConnection myConnection = new SqlConnection("Server = localhost; Database = mabdd; User ID = sa; Password = ****; Trusted_Connection = False;");
    En local, je peux indifféremment écrire "localhost" ou bien le nom du serveur, et tout marche bien, les requêtes s'exécutent sans problème. (L'authentification est de type SQL Server avec le compte sa)

    En revanche, lorsque je tente d'accéder à la base de données via un poste client, cela ne fonctionne pas, avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Data Source=192.168.10.1,1433;Network Library=DBMSSOCN;Initial Catalog=mabdd;User ID=sa;Password=****;");
    J'obtiens le message d'erreur suivant :
    "Provider : Fournisseur TCP, error : 0 - Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusé"

    J'ai déjà checké pas mal de points sur le serveur :

    -Dans "Configuration de la surface d'exposition de SQL Server 2005", les connexions distantes sont autorisées et SQL Server Browser est bien en cours d'exécution
    -Dans "SQL Server Configuration Manager", le protocole client TCP/IP est bien activé, et son port par défaut est bien le 1433. (Comment vérifier que c'est bien par ce port qu'il faut passer ?)
    -L'adresse IP du serveur est bien 192.168.10.1
    -J'ai redémarré plusieurs fois SQL Server
    -Parefeu Windows désactivé
    -Antivirus Norton désactivé
    -Le nom de mon instance est MSSQLSERVER. J'ai donc tenté de me connecter avec la string suivante "Data Source=192.168.10.1/MSSQLSERVER", mais ça ne fonctionne pas non plus

    Je ne vois plus où orienter mes recherches, ce que je trouve sur le net ne m'apporte pas d'éléments nouveaux. Si quelqu'un a une idée...

    PS : Je ne peux pas non plus utiliser l'assistant de connexion de Visual Studio 2005, car je développe l'application C# Windows Forms sur les PC de mon entreprise où Visual Studio 2005 est bien entendu installé, et non à partir des postes du réseau de l'entreprise cliente (sur lesquels Visual Studio 2005 n'est pas installé). (Ce qui fait que je n'ai pas accès au serveur à partir du poste où je programme)

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Named Pipe est aussi activé ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Merci pour votre réponse.

    Les canaux nommés sont effectivement activés eux aussi. (Ils l'étaient déjà par défaut, tout comme le protocole TCP/IP)

    Ce qui me paraît vraiment étrange, c'est que la connexion string suivante ne marche vraiment pas, même lorsque j'exécute directement mon application sur le serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Data Source=192.168.10.1,1433;Network Library=DBMSSOCN;Initial Catalog=mabdd;User ID=sa;Password=****;");
    Le problème viendrait donc de cette connexion string et non de la configuration réseau/SQL Server ? C'est peut-être le numéro de port qui est faux. J'ai vérifié dans SQL Server Configuration Manager et le port associé au protocole TCP/IP est bien le 1433. Mais c'est le port par défaut, peut-être est-il différent en l'occurence ?

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Vous avez essayé ceci:

    SqlConnection myConnection = new SqlConnection("Server = votreserver\nomdelinstance; Database = mabdd; User ID = sa; Password = ****; Trusted_Connection = False;");
    En gros, indiquer le nom du serveur ET le nom de l'instance ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    J'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlConnection myConnection = new SqlConnection("Server = monserveur/moninstance; Database = mabdd; User ID = sa; Password = ****; Trusted_Connection = False;");
    Et aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlConnection myConnection = new SqlConnection("Server = monserveur\\moninstance; Database = mabdd; User ID = sa; Password = ****; Trusted_Connection = False;");
    Mais ça ne marche pas, ni à distance, ni directement sur le serveur. (Erreur 40 avec les named pipes, alors que celles-ci semblent bien activées quand je vais dans les menus de configuration).

    Il doit y avoir un petit détail qui m'échappe et qui empêche tout cela de fonctionner.

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut


    Là, je ne comprend plus rien, désolé...

  7. #7
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Moi non plus

    Je n'ai installé SQL Server 2005 que dimanche dernier toutefois, et c'est la première fois que je travaille avec. Peut-être me suis-je trompé quelque part dans la configuration ?

    Je me permets de poster quelques captures d'écran qui révèleront peut-être la faille :

    Connexions distantes autorisées :


    SQL Browers en cours d'exécution :


    Protocoles TCP/IP et Named Pipes activés :


    Port TCP/IP par défaut : 1433


    Quant au firewall Windows, je l'ai carrément désactivé, inutile donc de créer une exception pour SQL Server 2005.

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Essaye p-e de changer l'odre: TCP/IP puis canaux nommés puis mémoire partagée

  9. #9
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé également, mais ça ne fonctionne pas non plus.

    Apparemment la mémoire partagée est :
    -Soit activée et dans ce cas toujours première
    -Soit désactivée

    J'ai donc tenté de la désactiver pour faire passer TCP/IP en 1 et canaux nommés en 2, mais ça ne résoud absolument rien.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Bon ça y est, après quelques heures de recherche supplémentaires, j'ai enfin résolu le problème.

    J'ai tout d'abord désinstallé SQL Server 2005, puis je l'ai réinstallé en donnant à mon instance un nom facilement reconnaissable, afin de ne pas la confondre avec l'instance déjà présente en provenance de SQL Server Express (qui était pré-installé avec mon serveur Windows Server 2003). Nommons cette instance : INSTANCE1

    Comme par magie, des options qui brillaient par leur absence sont alors apparues, notamment dans SQL Server 2005 Surface Configuration. Dans SQL Server Configuration également. En particulier, les protocoles (TCP/IP, canaux nommés) doivent s'activer dans "Configuration du réseau SQL Server 2005..." et non dans "SQL Native Client". SQL Native Client n'est en effet pas utilisé dans le cas présent, puisqu'on réalise une connection avec .NET.

    Ensuite, j'ai bien fait attention à ne travailler qu'avec mon instance INSTANCE1. J'ai activé les ports dynamiques avec TCP/IP (en mettant 0 comme valeur), puis j'ai repéré le port utilisé. Disons par exemple que c'est le port 1980. (Tout cela s'effectue dans SQL Server Configuration Manager) Bien entendu, j'ai activé TCP/IP dans SQL Server Configuration Manager ainsi que les connexions distantes dans Surface Configuration.

    Ma string de connexion, ci-dessous, fonctionne maintenant sans problème :

    "Data Source=192.168.10.1,1980;Network Library=DBMSSOCN;Initial Catalog=mabdd;User ID=sa;Password=****;"

    En bref, il faut bien faire attention à l'instance avec laquelle on travaille et se méfier des instances déjà existentes de SQL Server Express, qui ne sont pas effacées lorsqu'on installe SQL Server 2005, et bien comprendre le fonctionnement des connexions .NET et SQL Native Client, ainsi que les différences entre les protocoles TCP/IP et canaux nommés, afin de ne pas tenter des actions au hasard. Ne pas hésiter également à désinstaller et réinstaller SQL Server 2005 (c'est assez rapide en plus) et à redémarrer le serveur.

    Merci pour ton aide Thomas, et à la prochaine

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Content de voir que ton pb est résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] VB.NET et SQL Server 2008 - connexion à ma base de données
    Par chouchachaimouta dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/04/2012, 02h03
  2. SQL Server 2005 - Dupliquer une base
    Par zeloutre dans le forum Outils
    Réponses: 4
    Dernier message: 18/03/2010, 17h51
  3. [SQL SERVER 2K] ACTUALISER une Base de Données
    Par dondiavolo1983 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 11/04/2007, 07h41
  4. [SQL SERVER] Mettre à jour une base de donnée
    Par grellierj dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/05/2006, 11h33
  5. [Oracle/SQL-Server] Comment crypter une base de données ?
    Par [DreaMs] dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 28/11/2005, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo