2012-10-15 11 views
8

Questo è il codice che sto utilizzando per connettersi a SQL Server 2012 Express. Il nome del mio file è Connect.rb."Errore connessione chiusa" durante il tentativo di connettere Ruby al server 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]") 

Quando eseguo il codice, sto ottenendo il seguente errore:

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

quando sostituisco il codice precedente con il seguente,

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

ottengo il seguente errore :

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

What's ca usando questo errore e come risolverlo?

+3

Hai risolto il problema? Sto ottenendo lo stesso identico risultato. – christianblais

+0

Provare a sostituire il nome dell'istanza di SQL Server ('localhost \ SQLEXPRESS') con' (local) \ SQLEXPRESS' OR '. \ SQLEXPRESS'. [Procedura per la risoluzione dei problemi di connettività SQL] (http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx) –

+1

So che questo è vecchio ma c'è qualche soluzione per questo? Sto cercando di connettermi ad un instans locale di SQLEXPRESS e non posso. Potrei connettermi a un'istanza (non EXPRESS) in una macchina remota, ma non riuscivo a farlo funzionare sulla mia istanza locale. Qualche consiglio? – Migore

risposta

3

Sembra che la configurazione sia ok. il dataserver è il simbolo corretto per definire un'istanza non predefinita.

Verificare che i protocolli TCP/IP e Named pipes siano abilitati (è disabilitato per impostazione predefinita su SQL Express). Abilita anche il servizio SQL Server Browser in esecuzione (disabilitato per impostazione predefinita).

È possibile trovarli in Gestione configurazione server Sql nel menu Start in Microsoft SQL Server/Strumenti di configurazione. Assicurati di abilitarli sia nei "Protocolli client" che in ciascuna delle istanze elencate.

Inoltre, assicurarsi che il firewall consenta le connessioni sulla porta che SQL sta ascoltando (il valore predefinito è 1433).

Non è necessario specificare la porta poiché Tiny-TDS è impostato su 1433. Il secondo snippet di codice non include un'istanza. Se si dispone della configurazione di SQL Express su un'istanza, è necessario utilizzare dataserver, non host e specificare il nome dell'istanza.

1

Su Windows, è necessario:

In primo luogo, si dovrebbe essere avere tutte permision sul sql server, farlo con studio manager di Microsoft SQL Server.

In secondo luogo, con configurazione SQL Server, passare a configurazione di rete di SQL Server e abilitare i protocolli dell'istanza, questo è sono Pipeline con il nome e il protocollo TCP/IP, quelli essere attivato, una volta fatto questo, si dovrebbe andare a SQL SERVER Servizi e iniziare 1. SQL Server (esempio) e 2. Sql Server Browser explorer (importante)

on YAML: (esempio a finestre)

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

ho avuto questo problema esatto e, infine, calcolato fuori . So che è vecchio, ma spero che possa aiutare le persone in futuro.

Accedere a Sql Server Configuration Manager (Start >> Microsoft SQL Server >> Strumenti di configurazione) e attivare TCP/IP e Named Pipes. Nella configurazione di rete, fare clic con il tasto destro su TCP/IP, andare su Proprietà, quindi su Indirizzi IP. Devi abilitare la connessione che vuoi (sto usando una VM, quindi ho usato l'indirizzo IPv4 uno), oltre a nascondere le porte dinamiche TCP e specificare una porta statica (io uso 1433).

Quindi, è necessario consentire il traffico in ingresso alla porta 1433 (o qualsiasi altra sia la porta statica) attraverso il firewall.

Ho fatto questo e finalmente sono entrato!

2

Provare ad aggiungere il numero di porta (anche se è il valore predefinito di 1433) al valore del dataserver della propria configurazione. Ho avuto una configurazione in cui ero tunneling attraverso un dispositivo gestore del traffico per raggiungere uno SQL Server su una rete remota, e TinyTDS non vorrei collegare a meno che non specificatamente impostato la mia config come:

dataserver: 192.168.1.1:1433\SQL1 

Impostando il valore port: nella configurazione non ha fatto nulla nel mio caso. È strano che questo passaggio fosse necessario poiché il 1433 è comunque l'impostazione predefinita e nessuna delle altre configurazioni di connessione di SQL Server aveva bisogno di specificare la porta, ma aggiungerla è ciò che ha funzionato per me in questo caso particolare.

È possibile visualizzare il file di registro di FreeTDS per esaminare più da vicino il motivo per cui la connessione non funziona eseguendo export TDSDUMP=/tmp/freetds.log, quindi accendendo irb per verificare la connessione con TinyTDS durante la codifica del file di registro.

+0

Grazie mille! –

Problemi correlati