SNAC (SQL Server Native Client):
Es una API de acceso a datos que combina
las tecnologías del Proveedor OLE DB de SQL y el controlador ODBC de SQL, en una
sola DLL.
Las aplicaciones ADO pueden usar el proveedor OLE DB
de SQL Server Native Client.
Aunque SQL Server Native Client usa los componentes de
DAC para Windows, no depende de ninguna versión de DAC para Windows. Puede usar
SQL Server Native Client con la versión de DAC para Windows que tenga .
Si tu aplicación usa ODBC para conectarse, puedes ejecutar
osql.exe para simular el string de conexión de la aplicación y diagnosticar si
existiera algún problema. Si por el contrario la aplicación usa OLEDB, lo
puedes hacer con sqlcmd.exe
Tanto osql.exe como sqlcmd.exe están en la carpeta: %SYSTEMDRIVE%\%ProgramFiles%\Microsoft Sql
Server\90\tools\binn.
osql(sqlcmd) /S servidor
/E
osql(sqlcmd) /S servidorinstancia /E
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
Los errores más frecuentes en este tipo de conexiones
suelen ser:
[SQL Native
Client]Named Pipes Provider: Could not open a connection to SQL Server [53]:
El servidor SQL no puede ser accedido o no existe.
Intente usar: PING
nombreservidor ó PING ipservidor. Si los
pings tienen un timeout u otra falla, es posible que el nombre del servidor no
está siendo bien resuelto por el DNS o hay algún problema de red o de ruteo a
resolver. Obviamente, hay un problema de red si el ping falla cuando se
especifica simplemente la dirección IP del servidor.
[SQL Native Client]Named Pipes Provider: Could not
open a connection to SQL Server [2]:
Este error significa que el servicio SQL no está
iniciado, o que el servidor no fue encontrado, o que no se puede hacer una
conexión namedpipe usando el nombre especificado por el cliente. Para verificar
esto, hacer lo siguiente:
1. Abrir una línea de comandos.
2. Revisar si la instancia SQL está presente, ejecutando:
sc query mssqlserver
-o-
sc query mssql$nombreinstancia
3. Abrir el SQL Server Configuration Manager y revisar el estado del servicio
SQL. Si no ha iniciado, hacerlo. Si falla al iniciarlo, revisar el log de
eventos de Windows o el log de errores de SQL para ver cuál ha sido el
problema.
4. Si el servicio SQL está iniciado OK y están habilitados los protocolos
Shared Memory/Named Pipe, intentar una conexión a la instancia local por
omisión:
osql /Snp:.pipesqlquery
-o-
osql /Snp:.pipemssql$nombreinstanciasqlquery
5. Si sigue el mismo error, asegurarse (una vez más) que el servidor está
iniciado y escuchando en el namedpipe (si se ha habilitado NP). Para esto
revisar el log de errores de SQL Server buscando las palabras:
Server named pipe
provider is ready to accept connection on [ .pipesqlquery ] or
[.pipemssql$instanciasqlquery]
Observar que "sqlquery" es el NP por omisión, por lo que se necesita
saber exactamente en cuál NP está escuchando el servidor, si se cambió el valor
por omisión.
6. Revisar el string de conexión. Ver si explícitamente se especificó en el
string de conexión un NP y si coincide con el que el servidor tiene definido
para escuchar. En el cliente usar el SQL Server Configuration Manager, click en
las propiedades de Named Pipe del cliente, revisar si el NP coincide con el que
usa el servidor SQL.
[SQL Native Client]Named Pipes Provider: Could not
open a connection to SQL Server [233]:
Para resolver esto, la primera manera consiste en
reemplazar el nombre del servidor por el nombre de máquina, o ".", o
"(local)", o "nombremaquina" y la conexión deberá funcionar
si el servidor está escuhando a través de Shared Memory. La segunda manera
consiste en habilitar Named Pipe en el servidor (usar el Configuration Manager
y reiniciar el servicio).
[SQL Native Client]Named Pipes Provider: No process is
on the other end of the pipe:
Si el error se produce al hacer una conexión local,
especificar en el string de conexión el nombre del servidor usando 127.0.0.1 o
la dirección IP y usar Named Pipe. Para resolver el problema, o bien usar Named
Pipe o bien usar el nombre de máquina en el string de conexión al identificar
el servidor.
Si el error se produce al hacer una conexión remota a
otro servidor, posiblemente el servidor no está escuchando en Named Pipe. Para
resolver el problema, habilitar NP en el servidor remoto y reiniciar el
servicio remoto.
[SQL Native Client]SQL Network Interfaces: Server
doesn't support requested protocol [xFFFFFFFF]:
Si el error se produce al hacer una conexión local,
posiblemente se especificó en el string de conexión el prefijo de protocolo
"np:" intentando conectar a una instancia con nombre y NP no está
habilitado. Si el error se produce al hacer una conexión remota a otro
servidor, el servidor remoto tiene NP no habilitado.
Para resolver el problema habilitar NP en la instancia (local o remota) a la
que se desea conectar.
[SQL Native Client]SQL Network Interfaces: Error
Locating Server/Instance Specified [0xFFFFFFFF]:
Se intentó conectar a una instancia especificando
explícitamente los prefijos de protocolo “tcp:” o “np:” en el string de
conexión, pero el servicio SQLBrowser no está iniciado. Para resolver esto,
iniciar el servicio SqlBrowser en el servidor al que se desea conectar.
Usar el comando de línea NET START, con permisos de Administrator:
net start sqlbrowser
También se puede usar el SQL Server Configuration Manager, seleccionar el
servicio sqlBrowser, click en Propiedades, Advanced, Active. Verificar que el
servicio está iniciado y también activo.
[SQL Native Client]Shared Memory Provider: Could not
open a connection to SQLServer [2]:
Posiblemente en el string de conexión se especificó
"." "(local)" "localhost", se está usando
protocolo Shared Memory y el servidor no está escuchando en Shared Memory. Para
resolver este error habilitar el protocolo Shared Memory en el servidor y
reniciar el servicio SQL.
[SQL Native Client]SQL Network Interfaces: Cannot open
a Shared Memory connection to a remote SQL server [87]:
Se intentó conectar a una instancia especificando
explícitamente los prefijos de protocolo “tcp:” o “np:” en el string de
conexión, pero el servicio SQLBrowser no está iniciado. Para resolver esto,
iniciar el servicio SqlBrowser en el servidor al que se desea conectar.
Usar el comando de línea NET START, con permisos de Administrator:
net start sqlbrowser
También se puede usar el SQL Server Configuration Manager, seleccionar el
servicio sqlBrowser, click en Propiedades, Advanced, Active. Verificar que el
servicio está iniciado y también activo.
[SQL
Native Client]Unable to complete login process due to delay in opening server
connection:
Revisar en el string de conexión si hay espacios en blanco después del nombre
de instancia, por ejemplo:
osql /S"nombremaquina
ombreinstancia " /E
De ser eso, simplemente quitar los espacios en blanco:
"nombremaquina
ombreinstancia".
Otra posibilidad es que se esté intentando una conexión remota indicando el
nombre de un servidor y WINS está inhabilitado en la máquina cliente. Para
resolver esto, habilitar en la máquina cliente la opción “File and Printer
Sharing” y usar explícitamente el protocolo NP. Otra posibilidad es aumentar el
timeout de conexión a unos 30 segundos.
Por
motivos de firewall:
cuando
la conexión es bloqueada por algún firewall. Para resolver el problema hacer lo
siguiente:
1. Habilitar el servicio SqlBrowser. Además agregar a sqlbrowser.exe como
excepción en el firewall.
2. Agregar el puerto tcp (normalmente es el 1433) como excepción en el
firewall. Por ejemplo: Name-1433:TCP, Value-1433:TCP:*:Enabled:Tcp 1433.
(Este articulo, está
realizado gracias a la colaboración de Gustavo Larriera y Blogs del msdn ). Fuente: http://blogs.msdn.com/sql_protocols/archive/2005/10/22/483684.aspx - 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.