Tras revisar una charla que Gert Drappers impartió en TechEd 2004 en Amsterdam, me puse a hacer unas pruebas con cadenas de conexiones preparando un Taller MSDN que impartí esta mañana en Valencia llegando a un resultado “extraño” del que comparto mis conclusiones:

Sea el método Connect como sigue:

Private Sub Connect(ByVal server As String)
Dim s As String = “Server=” + server + “;Database=Northwind;Trusted_Connection=SSPI;Application Name=” + server + “;Pooling=false;”
Dim con As New SqlConnection(s)
Try
con.Open()
Console.WriteLine(“ok ; ” + server)
con.Close()
Catch ex As Exception
Console.WriteLine(“Error; ” + server + vbTab + ex.Message)
End Try
End Sub

Y las siguientes peticiones de conexión:

Connect(“lpc:localhost”)
Connect(“localhost”)
Connect(“np:localhost”)
Connect(“localhost”)
Connect(“tcp:localhost”)
Connect(“localhost”)

He deshabilitado “Connection Pooling” para que SQL Server Profiler me caze todas las peticiones de conexión;

Pues bien, los resultados que me ha dado Profiler han sido los siguientes:

Audit Login — network protocol: TCP/IP lpc:localhost 53
Audit Login — network protocol: TCP/IP localhost 53
Audit Login — network protocol: Named Pipes np:localhost 53
Audit Login — network protocol: Named Pipes localhost 53
Audit Login — network protocol: TCP/IP tcp:localhost 53
Audit Login — network protocol: TCP/IP localhost 53

Donde las columnas representan EventClass, TextData, Application Name y SPID.

Llegando a la siguiente conclusión:

Cada vez que conectas con nombre de servidor localhost, independientemente del protocolo de conexión especificado, SQL Server conectará con el protocolo anteriormente usado para nombre de servidor localhost; en caso de que no haya sido utilizado ninguno (en el registro de windows no hay información de cuál fué el protocolo anteriormente usado) conectará con protocolo TCP/IP.

Por si os interesa, he utilizado la utilidad Regmon de sysinternals que muestra los accesos realizados al registro de windows.

http://www.sysinternals.com/ntw2k/source/regmon.shtml

La entrada del registro que guarda cual fué el ultimo protocolo de conexión utilizado es:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerClientSuperSocketNetLibLastConnect

Y la recomendación sería la siguiente:

Utiliza como nombre de servidor en conexiones a la máquina Local: (local), . (punto) o el nombre del servidor.
Define en tu cadena de conexión el protocolo de conexión a utilizar; en el fondo es sencillo; anteponer al nombre del servidor el protocolo de conexión seguido de dos puntos:
np para Named Pipes,
tcp para TCP/IP y
lpc para Shared Memory (memoria compartida).

Notas:

el comportamiento no se reproduce en .NET Framework 2.0 🙂
si el nombre del servidor es (local) o . (punto) y no se especifica protocolo de conexión, el funcionamiento es el esperado; conectará por Shared Memory.

Otra nota (para los asistentes a la sesión de MSDN en Valencia):

El comentario que hice sobre el comportamiento de peticiones de conexión con localhost no fué correcto; os dije que cuando conectamos con nombre de servidor localhost, independientemente del protocolo de conexión especificado la conexión SIEMPRE se realizaría con TCP/IP; siento haberme expresado erroneamente … y nos vemos en la próxima !!!! 🙂

comentadme que opináis sobre este comportamiento ...
0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like
Leer más

Depurar aplicaciones contra datos de producción: ofuscación y GDPR

¿Cómo trabajas con tus bases de datos en producción? ¿Y en entornos de desarrollo? Las organizaciones manejan un enorme volumen de datos personales en sus plataformas de datos y documentos electrónicos digitalizados y físicos que custodian. El 90% de los documentos que las empresas almacenan tiene algún tipo de información de carácter personal. ¿Estás tomando las medidas adecuadas para proteger la información sensible, como exige la normativa? La ofuscación puede ayudarte a cumplir con la GDPR. En este artículo te contamos cómo.

Más ejemplos de validación de datos con T-SQL

¿Cómo validas que los datos están proporcionando la información correcta? La validación es un aspecto imprescindible en tus proyectos. ¡Toma nota! A veces podemos realizar conteos a tablas muy grandes que llevan mucho tiempo, o necesitamos comprobar si existe una tabla o un campo dentro de una tabla, o poder comparar los resultados de 2 consultas distintas. Hoy veremos ejemplos de estos casos empleando diferentes técnicas y ejemplos prácticos con T-SQL para detectar posibles errores y su validación.