2008-09-11 7 views
2

Je passais en revue un peu de code qu'un consultant a enregistré et notez qu'ils utilisaient SQLCLR. Je n'ai aucune expérience avec ça alors je pensais que je voudrais savoir de quoi il s'agissait. J'ai remarqué qu'ils ont utiliséLa différence entre les chaînes de connexion dans SQLCLR

Dim cn As New SqlConnection("server=LOCALHOST;integrated security=yes;database=" & sDb) 

au lieu de

DIM conn As New SqlConnection("context connection=true") 

Je me demande quelle est la différence car il est localhost sur le premier?

Répondre

5

La connexion de contexte utilise la connexion déjà établie de l'utilisateur au serveur. Vous héritez donc de choses comme leur contexte de base de données, les options de connexion, etc.

L'utilisation de localhost permet de se connecter au serveur en utilisant une connexion à mémoire partagée normale. Cela peut être utile si vous ne voulez pas utiliser la connexion de l'utilisateur (c'est-à-dire si vous souhaitez vous connecter à une base de données différente, ou avec des options différentes, etc.).

Dans la plupart des cas, vous devez utiliser la connexion de contexte, car elle ne crée pas de connexion distincte au serveur. De plus, sachez que l'utilisation d'une connexion séparée signifie que vous ne faites pas partie de la transaction de l'utilisateur et que vous êtes soumis à une sémantique de verrouillage normale.

1

Considérons un grand système de téléphone de bureau:

Mon bureau dispose d'un système téléphonique interne. Mais chaque téléphone a également un numéro de téléphone externe (numéros virtuels qui utilisent un groupe de lignes TELCO réelles). Je peux appeler un autre bureau en composant directement leur numéro de téléphone et l'appel sera acheminé via notre système téléphonique interne (un saut). Sinon, je peux composer le numéro de téléphone de ce téléphone et l'appel est acheminé du système de l'immeuble au bureau de commutation de TELCO, puis de nouveau à travers le système de l'immeuble puis à l'extension du bureau (3 hops).

La première connexion SQL se comporte comme n'importe quelle connexion SQL standard lors de la connexion au serveur spécifié dans la chaîne de connexion. Une nouvelle connexion est créée à l'aide de la connectivité SQL native standard. Cela se comporte comme composer le numéro de téléphone public complet d'un autre téléphone de bureau. Bien sûr, vous vous connectez à la machine locale, mais la connexion est acheminée différemment.

La connexion de contexte a la nouvelle instance SqlConnection utilisant la connexion existante qui exécute l'objet SQLCLR. Il utilise le contexte existant/local. C'est comme composer l'extension de mon collègue de bureau directement. Contexte local et plus efficace.

Bien que je ne sois pas positif, je crois que lors de l'utilisation de la connexion de contexte, les appels aux objets SQLCLR participent également à la transaction du contexte. Quelqu'un s'il vous plaît corrigez-moi si je me trompe.

Peter