Come faccio a far funzionare questa connessione ODBC di SQL Server?


30

Nota: ho ovviamente cambiato i nomi dei server e gli IP in quelli fittizi.

Ecco cosa sta succedendo. Ho un server, che sto chiamando MYSERVER, che esegue Microsoft SQL Server Express 2005. Proprio su questo server stesso, ho una connessione ODBC impostata che punta su se stessa e che funziona già perfettamente. Accedo usando l'autenticazione di SQL Server (non l'autenticazione di Windows) ed è impostato in questo modo:

Immagine di una buona connessione ODBC

Come ho detto, quello funziona. Ma poi, ho un altro computer che si trova su un dominio completamente diverso / non sull'intranet, che deve accedere a questo stesso SQL Server ospitato su MYSERVER. Poiché si trova su un dominio diverso, non riconosce il nome "MYSERVER"; Devo indicarlo all'indirizzo IP di MYSERVER, che diremo è 123.456.789.012. Ma la connessione ODBC non sembra funzionare lì. Ho provato a configurarlo in questo modo:

Immagine di una connessione ODBC errata

Questo non funziona Quando inserisco il nome utente e la password e premo Avanti, si blocca per 10-20 secondi, quindi alla fine torna con il seguente errore:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

Se provo la stessa cosa, ma cambio il "server" da 123.456.789.012\SQLEXPRESSsemplicemente vecchio 123.456.789.012, ottengo un errore diverso:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

Ora so cosa stai pensando. Potresti pensare "Duh, probabilmente non hai aperto il firewall per la porta 1433, manichino". Tranne che ho fatto e ho verificato questo, come posso eseguire correttamente :

telnet 123.456.789.012 1433

... dalla riga di comando tutto ciò che voglio. Quindi non sono sicuro di cosa fare. So che SQL Server esiste, funziona e una connessione ODBC può essere impostata correttamente; Non sono sicuro di cosa abbia sbagliato nelle mie impostazioni di connessione che generano questi errori. Sulla base dell'ultimo errore che ho elencato, sembrerebbe che possa connettersi al server, ma semplicemente non riesco a trovare l'istanza (dal momento che non ne ho specificato uno quella volta). Ciò significa che devo solo usare una sintassi diversa per specificare l'IP insieme a un nome di istanza? Cosa faccio? Grazie in anticipo.

Risposte:


18

Le pipe denominate e i protocolli TCIP per SQL Server 2005 sono disabilitati per impostazione predefinita. Li hai abilitati in "Gestione configurazione server SQL"? È possibile trovare i protocolli nella configurazione di rete di SQL Server e nella configurazione xx di SQL Native client.

La connessione sul server stesso funziona grazie al protocollo "Memoria condivisa".


9
Accetto la tua risposta perché mi ha portato sulla strada giusta. In Gestione configurazione SQL Server, TCP / IP era già abilitato da sempre in "Configurazione della rete SQL Server 2005> Protocolli per SQLEXPRESS" e "Configurazione client nativo SQL> Protocolli client". Named Pipes era già abilitato in quest'ultimo. L'ho abilitato nel primo, ma questo non sembra aiutare (stessi messaggi di errore). Infine, ho cambiato la sorgente ODBC per utilizzare il driver "SQL Native Client" anziché il driver "SQL Server", e alla fine DID ha funzionato.
soapergem,

Grazie SoaperGEM! Non avrei mai pensato di provare SQL Native Client! Ha funzionato come un fascino!
Phillip Senn,

5

Hai abilitato il servizio SQL Server Browser secondo Come configurare SQL Server 2005 per consentire le connessioni remote ?

Se si esegue SQL Server 2005 utilizzando un nome di istanza e non si sta utilizzando un numero di porta TCP / IP specifico nella stringa di connessione, è necessario abilitare il servizio SQL Server Browser per consentire le connessioni remote. Ad esempio, SQL Server 2005 Express è installato con un nome di istanza predefinito Nome computer \ SQLEXPRESS.


La connessione al server \ istanza sul locale utilizza un meccanismo diverso rispetto a remoto ??
Sam,

@ Sam vedi la risposta di Hakan Winther.
Sim

4

Questo thread ha risolto lo stesso messaggio di errore quando ho usato Access per connettermi a un server MSSQL 2008. MSSQL 2005 e versioni precedenti funzionavano bene usando solo il nome del computer nella stringa di connessione, ma ho dovuto passare alla stringa di connessione in Access al modulo completo quando l'istanza è stata aggiornata al 2008:

servername\instancename,portnumber


2
Lo ha fatto per me, tranne per il fatto che non avevo bisogno del numero di porta.
bgmCoder

2

Ho avuto lo stesso problema e sono riuscito a risolverlo cambiando anche il driver SQL con il driver SQL Native Client. Era strano perché nel mio caso funzionava bene da anni e poi ha smesso di funzionare. Ho il sospetto che questo sia qualcosa sulla falsa riga del driver che potrebbe essere corrotto, forse un reinstal di MDAC potrebbe aiutare, ma per il momento sono contento che stia funzionando!


1

Riconoscerebbe il nome del server se fosse pienamente qualificato? Se fosse MYSERVER.domain.com? Abbiamo dovuto farlo con SQL Server durante la connessione da un dominio diverso. Se riesci a far connettere il DSN di sistema ODBC durante il test dell'origine dati, stai facendo progressi. Se non si connette nella configurazione ODBC, è necessario prima risolverlo.


Questo è esattamente quello che sto cercando di fare: far sì che DSN di sistema ODBC si connetta in primo luogo quando collaudo l'origine dati. Quindi ho provato il tuo suggerimento, provando entrambi MYSERVER.domain.com\SQLEXPRESSe MYSERVER.domain.com, ma entrambi mi hanno dato gli stessi errori che ho elencato sopra, rispettivamente.
soapergem,

A un prompt dei comandi sull'altro computer digitare "nslookup MYSERVER.domain.com" - questo si risolve nel giusto indirizzo IP (123.456.789.012) o affatto?
Sim

@Sim: Sì, quel comando si risolve correttamente.
soapergem,

1

Stai utilizzando named pipe o TCP sulla connessione ODBC che funziona? TCP è abilitato?


1

Assicurarsi di disporre dei connettori tcp remoti abilitati per il server SQL.


0

Solo uno scatto selvaggio qui, ma cosa succede se si inserisce una doppia barra rovesciata prima del nome del server o dell'indirizzo IP? Mi sembra che sia normalmente richiesto per la maggior parte delle altre connessioni Windows / Microsoft.


Provare la doppia barra rovesciata provoca lo stesso errore 1326 (il primo che ho elencato).
soapergem,

0

Ho avuto un problema simile. Nel mio caso, un altro sw configura l'impostazione ODBC, quindi non posso cambiare il driver. Ho risolto il mio caso in questo modo:

  1. Configurare le impostazioni TCP / IP affinché il server utilizzi la porta 1433
  2. Sul client immettere l'indirizzo del server come: 192.168.1.5,1433 (senza nome istanza)

Quindi ha iniziato a funzionare. Sistema operativo client: driver Win7 x64: sqlsrv32.dll


0

Per quello che vale, ho iniziato a ricevere questo errore su una connessione che aveva funzionato in precedenza. Si è scoperto che il servizio MSSQL $ SQLEXPRESS era stato in qualche modo interrotto. Il riavvio ha risolto il problema.


0

Ho avuto anche questo problema, ed era semplice: il server elencato come server DNS primario per questo server è stato rimosso e l'app non è stata più in grado di risolvere correttamente il nome del server SQL sulla rete. Tutto ha ripreso immediatamente a funzionare quando ho corretto il server DNS locale su uno funzionante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.