2012-10-15 3 views
8

Ceci est le code que j'utilise pour me connecter à SQL Server 2012 Express. Le nom de mon fichier est Connect.rb."Erreur de connexion fermée" lors de la tentative de connexion de Ruby au serveur SQL

require "rubygems" 
require "tiny_tds" 
client = TinyTds::Client.new(
        :username => 'sa', 
        :password => 'sapassword', 
        :dataserver => 'localhost\SQLEXPRESS', 
        :database => 'ContactsDB') 
result = client.execute("SELECT * FROM [Contacts]") 

Quand je lance le code, j'obtiens l'erreur suivante:

in 'execute' :closed connection (TinyTds::Error) from Connect.rb: in 'main'

quand je remplace le code ci-dessus par la suite,

client = TinyTds::Client.new(
        :username => 'sa', 
        :password => 'sapassword', 
        :host => 'localhost', 
        :port => 1433, 
        :database => 'ContactsDB') 

Je reçois l'erreur suivante :

in 'connect': Unable to connect: Adaptive server is unavailable or does not exist

Quoi de neuf? en utilisant cette erreur et comment le réparer?

+3

Avez-vous enfin résolu votre problème? Je reçois exactement le même résultat. – christianblais

+0

Essayez de remplacer le nom d'instance de SQL Server ('localhost \ SQLEXPRESS') par' (local) \ SQLEXPRESS' ou '. \ SQLEXPRESS'. [Étapes pour résoudre les problèmes de connectivité SQL] (http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx) –

+1

Je sais que c'est vieux mais est-ce qu'il y a une solution pour ça? J'essaie de me connecter à un instans local de SQLEXPRESS et je ne peux pas. Je pouvais me connecter à une instance (pas EXPRESS) dans une machine distante, mais je ne pouvais pas la faire fonctionner sur mon instance locale. Des conseils? – Migore

Répondre

3

On dirait que la configuration est correcte. dataserver est le symbole correct pour définir une instance non par défaut.

Assurez-vous que les protocoles de canaux TCP/IP et nommés sont activés (il est désactivé par défaut sur SQL Express). Activez également le service SQL Server Browser (désactivé par défaut).

Vous pouvez les trouver dans le Gestionnaire de configuration du serveur Sql dans le menu Démarrer sous Microsoft SQL Server/Outils de configuration. Assurez-vous de les activer à la fois dans les 'protocoles clients' et sur chacune des instances listées.

En outre, assurez-vous que votre pare-feu autorise les connexions sur le port en cours d'écoute SQL (la valeur par défaut est 1433).

Pas besoin de spécifier le port car Tiny-TDS par défaut est 1433. Votre second extrait de code n'inclut pas d'instance. Si vous avez installé SQL Express sur une instance, vous devez utiliser dataserver, pas l'hôte, et spécifier le nom de l'instance.

1

Sous Windows, vous avez besoin:

Première, vous devriez être ont tous permision sur le serveur SQL, faire avec le studio de gestion Microsoft SQL Server.

Deuxième, avec Sql Server Configuration Manager, accédez à la configuration SQL serveur réseau et activer les protocoles de votre INSTANCE, thats sont Pipeline avec le nom et TCP/IP, les être activés, une fois faites cela, vous devez aller à SQL sERVEUR services et commencer à 1. SQL Server (instance) et 2. Sql explorateur explorateur de serveur (important)

sur YAML: (par exemple sur les fenêtres)

development: 
    adapter: sqlserver 
    database: GESTIONESDIVERSASDESARROLLO 
    username: Admin1\Admin 
    password: passw0rd 
    dataserver: ADMIN1\SQLDEVELOPER 
    timeout: 10 
2

J'ai eu ce problème exact et enfin figured it out . Je sais que c'est vieux mais j'espère que cela pourrait aider les gens dans le futur. Allez dans Sql Server Configuration Manager (Démarrer >> Microsoft SQL Server >> Outils de configuration) et activez TCP/IP et les canaux nommés. Dans la configuration réseau, faites un clic droit sur TCP/IP, allez dans Propriétés, puis Adresses IP. Vous devez activer la connexion que vous voulez (j'utilise une VM, donc j'ai utilisé l'adresse IPv4), ainsi que les ports TCP dynamiques et spécifier un port statique (j'utilise 1433). Puis, vous devez autoriser le trafic entrant au port 1433 (ou à tout autre port statique) via votre pare-feu.J'ai fait ça, et finalement je suis rentré!

2

Essayez d'ajouter le numéro de port (même s'il s'agit de la valeur par défaut de 1433) à la valeur du serveur de données de votre config. J'ai eu une configuration où je me trouvais à effet tunnel à travers un appareil de gestion du trafic pour atteindre un serveur SQL sur un réseau distant, et TinyTDS ne se connecter à moins que je mets spécifiquement ma comme config:

dataserver: 192.168.1.1:1433\SQL1 

Réglage de la valeur port: dans la configuration n'a rien fait dans mon cas. Il est étrange que cette étape soit nécessaire puisque 1433 est la valeur par défaut de toute façon, et aucune de mes autres config de connexion SQL Server ne nécessitait que le port soit spécifié, mais l'ajouter est ce qui a fonctionné pour moi dans ce cas particulier.

Vous pouvez regarder votre fichier journal FreeTDS pour voir de plus près pourquoi votre connexion échoue en lançant export TDSDUMP=/tmp/freetds.log puis en lançant irb pour tester votre connexion avec TinyTDS tout en conservant ce fichier journal.

+0

Merci beaucoup! –

Questions connexes