example - La diferencia entre las cadenas de conexiones en SQLCLR
clr stored procedure (2)
Estaba revisando un código que un consultor registró y noté que estaban usando SQLCLR. No tengo ninguna experiencia con eso, así que pensé en investigar de qué se trataba. Noté que usaban
Dim cn As New SqlConnection("server=LOCALHOST;integrated security=yes;database=" & sDb)
en lugar de
DIM conn As New SqlConnection("context connection=true")
Me pregunto ¿cuál es la diferencia ya que es localhost en el primero?
Considere un gran sistema de teléfonos de oficina:
Mi oficina tiene un sistema telefónico interno. Pero cada teléfono también tiene un número de teléfono externo (números virtuales que utilizan uno de un grupo de líneas TELCO reales). Puedo llamar a otra oficina marcando directamente su extensión de teléfono y la llamada se enrutará a través de nuestro sistema telefónico interno (un salto). Alternativamente, podría marcar el número público de ese teléfono y la llamada se dirige desde el sistema del edificio a la oficina de conmutación de TELCO, luego de vuelta a través del sistema del edificio y luego a la extensión de la oficina (3 saltos).
La primera conexión SQL se comporta como lo haría cualquier conexión SQL estándar cuando se conecta al servidor especificado en la cadena de conexión. Se crea una nueva conexión utilizando la conectividad SQL nativa estándar. Esto se comporta como marcar el número de teléfono público completo de otro teléfono de la oficina. Claro, te estás conectando a la máquina local, pero la conexión se enruta de manera diferente.
La conexión de contexto tiene la nueva instancia de SqlConnection que utiliza la conexión existente que está ejecutando el objeto SQLCLR. Está usando el contexto existente / local. Esto es como marcar directamente la extensión de mi compañero de oficina. Contexto local y más eficiente.
Aunque no soy positivo, creo que al usar la conexión de contexto, las llamadas a los objetos SQLCLR también participan en la transacción del contexto. Alguien por favor corrígeme si estoy equivocado.
Peter
La conexión de contexto usa la conexión ya establecida del usuario con el servidor. Entonces heredas cosas como el contexto de su base de datos, las opciones de conexión, etc.
El uso de localhost se conectará al servidor utilizando una conexión de memoria compartida normal. Esto puede ser útil si no desea utilizar la conexión del usuario (es decir, si desea conectarse a una base de datos diferente, o con diferentes opciones, etc.).
En la mayoría de los casos, debe usar la conexión de contexto, ya que no crea una conexión separada al servidor.
Además, ten en cuenta que usar una conexión separada significa que no eres parte de la transacción del usuario y estás sujeto a la semántica de bloqueo normal.