Разница между строками соединения в SQLCLR - PullRequest
2 голосов
/ 11 сентября 2008

Я просматривал некоторый код, который проверил консультант и заметил, что он использует SQLCLR. У меня нет никакого опыта с этим, поэтому думал, что я исследую, о чем это. Я заметил, что они использовали

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

вместо

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

Мне интересно, какая разница, так как это localhost на первом?

Ответы [ 2 ]

6 голосов
/ 11 сентября 2008

Контекстное соединение использует уже установленное пользователем соединение с сервером. Таким образом, вы наследуете такие вещи, как контекст базы данных, параметры подключения и т. Д.

Используя localhost, вы подключитесь к серверу через обычное соединение с общей памятью. Это может быть полезно, если вы не хотите использовать подключение пользователя (т. Е. Если вы хотите подключиться к другой базе данных или с другими параметрами и т. Д.).

В большинстве случаев вам следует использовать контекстное соединение, поскольку оно не создает отдельного соединения с сервером.

Также имейте в виду, что использование отдельного соединения означает, что вы не участвуете в транзакции пользователя и подвержены обычной семантике блокировки.

1 голос
/ 11 сентября 2008

Рассмотрим большие офисные телефонные системы:

В моем офисе установлена ​​внутренняя телефонная система. Но у каждого телефона также есть внешний номер телефона (виртуальные номера, которые используют одну из группы реальных линий TELCO). Я могу позвонить в другой офис, набрав их добавочный номер напрямую, и звонок будет направлен через нашу внутреннюю телефонную систему (один переход). В качестве альтернативы я мог бы набрать общедоступный номер этого телефона, и вызов перенаправляется из системы здания в коммутационный пункт TELCO, затем обратно через систему здания, а затем в добавочный номер офиса (3 перехода).

Первое соединение SQL ведет себя так же, как и любое стандартное соединение SQL при подключении к серверу, указанному в строке соединения. Новое соединение создается с использованием стандартного собственного соединения SQL. Это ведет себя как набор полного общедоступного номера телефона другого офисного телефона. Конечно, вы подключаетесь к локальной машине, но соединение маршрутизируется по-другому.

У контекстного соединения есть новый экземпляр SqlConnection, использующий существующее соединение, которое выполняет объект SQLCLR. Он использует существующий / локальный контекст. Это похоже на набор номера моего офисного напарника напрямую. Локальный контекст и более эффективный.

Хотя я не уверен, но считаю, что при использовании контекстного соединения вызовы объектов SQLCLR также участвуют в транзакции контекста. Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь.

Peter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...