Veamos cada caso según estén habilitados o no, los protocolos Shared Memory (SM), TCP/IP y Named Pipes (NP).
Los casos siguientes cubren los casos de clientes MDAC 2.8/2.81/2.82 conectándose a SQL Server 2005/2008 instalado en Windows 2000/2003/XP.
Para el buen entendimiento de este articulo se recomienda la lectura de: Solución de problemas en la conexión a SQL Server 2005/2008.
CASO 1: Solamente está habilitado SM
Diagnósticos:
1.1. Se especificó el prefijo “tcp:” en el string de conexión, pero TCP/IP no está habilitado. Para solucionar esto, quitar el prefijo o habilitar TCP/IP.
1.2. Se especificó el prefijo “np:” en el string de conexión, además se especificó como servidor “localhost”, un FQDN, “127.0.0.1” o la dirección IP. Para solucionar esto, o bien habilitar NP o especificar como servidor “nombremáquina”.
1.3. Se especificó como servidor “localhost”, un FQDN, “127.0.0.1” o la dirección IP. Para solucionar esto especificar como servidor “nombremáquina”.
1.4. Se especificó el prefijo “lpc:” en el string de conexión, además se especificó como servidor “localhost”, un FQDN, “127.0.0.1” o la dirección IP. Para solucionar esto, especificar como servidor “nombremáquina”.
1.5. Se usa el proveedor OLEDB, luego se conecta a la instancia por omisión usando “.” o “(local)”. Para solucionar esto, especificar como servidor “nombremáquina”.
CASO 2: SM y TCP/IP habilitados, NP no habilitado
Diagnósticos:
2.1. Se especificó el prefijo “np:” en el string de conexión, además se especificó como servidor “localhost”, un FQDN, “127.0.0.1” o la dirección IP. Para solucionar esto, o bien habilitar NP o especificar como servidor “nombremáquina”.
2.2. Se especificó el prefijo “lpc:” en el string de conexión, además se especificó como servidor “localhost”, un FQDN, “127.0.0.1” o la dirección IP. Para solucionar esto, especificar como servidor “nombremáquina”.
CASO 3: SM y NP habilitados, TCP/IP no habilitado
Diagnósticos:
3.1. Se especificó el prefijo “tcp:” en el string de conexión, pero TCP/IP no está habilitado. Para solucionar esto, quitar el prefijo o habilitar TCP/IP.
3.2. Se usa el proveedor OLEDB, luego se conecta a la instancia por omisión usando “.” o “(local)”. Para solucionar esto, especificar como servidor “nombremáquina”.
CASO 4: Solamente NP habilitado
Diagnósticos:
4.1. Se especificó el prefijo “tcp:” en el string de conexión, pero TCP/IP no está habilitado. Para solucionar esto, quitar el prefijo o habilitar TCP/IP.
4.2. Se usa el proveedor OLEDB, luego se conecta a la instancia por omisión usando “.” o “(local)”. Para solucionar esto, especificar como servidor “nombremáquina”.
CASO 5: Solamente TCP/IP habilitado
Diagnósticos:
5.1. Se especificó el prefijo “np:” en el string de conexión, y NP no está habilitado. Para solucionar esto, eliminar el prefijo o habilitar NP.
CASO 6: Solamente SM está habilitado
CASO 7: Todos los protocolos están habilitados
En los Casos 6 y 7 todas las conexiones deberán ser exitosas, exceptuando algunos casos especiales que mencionaremos a continuación.
Caso especial 1: localhost
Windows 2000 y Windows XP no reconocen “localhost” como un nombre representativo de máquina en NP. En otras palabras, no se puede conectar a una instancia por omisión a través del pipe explícito file:///pipe/sql/query
Por ejemplo, el string de conexión es algo como:
"Data Source = file:///pipe/sql/query; Integrated Security = SSPI"
-o-
osql /S\localhostpipesqlquery /E
Caso especial 2: Conexión a instancia local nombrada
Si no se puede identificar la causa de una conexión fallida cuando se usa MDAC para conectarse a una instancia local con nombre, hay otras dos razones posibles:
2.1. La aplicación ejecuta bajo una cuenta que no tiene permisos en la Registry de Windows donde el cliente MDAC lee. Dicha entrada es:
HKLMSOFTWAREMicrosoftMicrosoft SQL ServerinstanciaMSSQLServer
2.2. El servicio SQL Browser no está iniciado o habilitado. Intentar:
net start sqlbrowser
Caso especial 3: Conexión remota
Cuando la conexión a un servidor remoto falla y se observa algunos de los mensajes de error de más arriba, primero hay que revisar si en el servidor remoto están habilitados NP o TCP/IP, y si el servicio SQL Browser está habilitado e iniciado.
Caso especial 4: Servidor especificado en blanco
Si se usa el driver ODBC y se deja en blanco el nombre del servidor al conectarse a una instancia local, la conexión puede fallar. Para solucionarlo, especificar el nombre del servidor cada vez que se haga una conexión. El error usualmente es:
[Microsoft][ODBC SQL Server Driver]Neither DSN nor SERVER keyword supplied
Caso especial 5: "." o "(local)"
Si se usa MDAC OLEDB, no se puede conectar a una instancia local por omisión, usando “.” o “(local)” cuando TCP/IP está inhabilitado. Para solucionar esto, usar el nombre de máquina al especificar el servidor en el string de conexión.
(Este articulo, está realizado gracias a la colaboración de Gustavo Larriera ). Apunte y recopilación por Norman M. Pardell
Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.