2012-10-15 14 views
8

Dies ist der Code, den ich verwende, um eine Verbindung mit SQL Server 2012 Express herzustellen. Der Name meiner Datei lautet Connect.rb."Verbindungsfehler geschlossen" beim Versuch, Ruby mit SQL Server zu verbinden

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

Wenn ich den Code ausführen, erhalte ich folgende Fehlermeldung:

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

, wenn ich den obigen Code durch folgende ersetzen,

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

ich folgende Fehlermeldung erhalten :

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

Was ist ca Verwenden Sie diesen Fehler und wie Sie es beheben?

+3

Hast du deinen Fehler endlich behoben? Ich bekomme genau das gleiche Ergebnis. – christianblais

+0

Versuchen Sie, den Instanznamen des SQL Servers ('localhost \ SQLEXPRESS') durch' (local) \ SQLEXPRESS' ODER '. \ SQLEXPRESS' zu ersetzen. [Schritte zum Beheben von SQL-Konnektivitätsproblemen] (http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx) –

+1

Ich weiß, das ist alt, aber Gibt es dafür irgendeine Lösung? Ich versuche, mich mit einem lokalen Instans von SQLEXPRESS zu verbinden, und ich kann nicht. Ich könnte eine Verbindung zu einer Instanz (nicht EXPRESS) auf einem entfernten Rechner herstellen, aber ich konnte es nicht mit meiner lokalen Instanz arbeiten lassen. Irgendwelche Tipps? – Migore

Antwort

3

Sieht aus wie die Konfiguration ist in Ordnung. dataserver ist das richtige Symbol, um eine nicht standardmäßige Instanz zu definieren.

Stellen Sie sicher, dass TCP/IP und Named Pipes-Protokolle aktiviert sind (in SQL Express ist es standardmäßig deaktiviert). Aktivieren Sie auch SQL Server Browser-Dienst wird ausgeführt (standardmäßig deaktiviert).

Sie finden diese im Sql Server Configuration Manager im Startmenü unter Microsoft SQL Server/Konfigurationstools. Stellen Sie sicher, dass Sie sie sowohl in den Clientprotokollen als auch in jeder der aufgelisteten Instanzen aktivieren.

Stellen Sie außerdem sicher, dass Ihre Firewall Verbindungen auf dem Port zulässt, den SQL überwacht (Standardwert ist 1433).

Der Port muss nicht angegeben werden, da Tiny-TDS standardmäßig den Wert 1433 hat. Ihr zweites Code-Snippet enthält keine Instanz. Wenn Sie SQL Express für eine Instanz eingerichtet haben, müssen Sie den Dataserver, nicht den Host, verwenden und den Instanznamen angeben.

1

Unter Windows benötigen Sie:

Erste, sollten Sie alle permision auf SQL-Server haben, tun dies mit Microsoft SQL Server Manager-Studio.

Zweite, mit SQL Server Configuration Manager, gehen Sie auf SQL Server-Netzwerkkonfiguration und ermöglichen Protokolle Ihres INSTANZ sind, das ist Pipeline mit dem Namen und TCP/IP, diejenigen aktiviert werden, tun einmal, dass Sie SQL gehen soll Server-Dienste und 1. SQL Server (Beispiel) und 2. SQL Server-Browser Explorer (wichtig)

auf YAML starten: (Beispiel auf Fenster)

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

ich genau dieses Problem hatte und dachte, es endlich . Ich weiß, das ist alt, aber ich hoffe, es könnte Menschen in der Zukunft helfen.

Gehen Sie in den Sql Server Configuration Manager (Start >> Microsoft SQL Server >> Konfigurationstools) und aktivieren Sie TCP/IP und Named Pipes. Klicken Sie in der Netzwerkkonfiguration mit der rechten Maustaste auf TCP/IP, wählen Sie Eigenschaften und dann IP-Adressen. Sie müssen die gewünschte Verbindung aktivieren (ich verwende eine VM, also habe ich die IPv4-Adresse verwendet), TCP-Dynamische Ports ausblocken und einen statischen Port angeben (ich benutze 1433).

Dann müssen Sie eingehenden Datenverkehr zu Port 1433 (oder was auch immer Ihr statischer Port ist) durch Ihre Firewall zulassen.

Ich tat das und kam endlich rein!

2

Versuchen Sie, die Portnummer (auch wenn es der Standardwert 1433 ist) zum Datenserverwert Ihrer Konfiguration hinzuzufügen. Ich hatte eine Einrichtung, wo ich Tunneln durch einen Verkehrsmanager Gerät war ein SQL Server auf einem Remote-Netzwerk zu erreichen, und TinyTDS nicht anschließen, wenn ich meine Config speziell gesetzt wie:

dataserver: 192.168.1.1:1433\SQL1 

Einstellen den port: Wertes in der Config hat in meinem Fall nichts gemacht. Es ist merkwürdig, dass dieser Schritt benötigt wurde, da 1433 ohnehin der Standard ist, und keine meiner anderen SQL Server-Verbindungskonfigurationen benötigte, dass der Port spezifiziert wurde, aber das Hinzufügen war für mich in diesem speziellen Fall die Lösung.

Sie können Ihre FreeTDS-Protokolldatei ansehen, um einen genaueren Blick darauf zu werfen, warum Ihre Verbindung fehlschlägt, indem Sie export TDSDUMP=/tmp/freetds.log ausführen und irb dann hochfeuern, um Ihre Verbindung mit TinyTDS zu testen, während Sie diese Protokolldatei verfolgen.

+0

Vielen Dank! –