Я использую VSTS 2008 + C # + ADO.Net + SQL Server 2008. При подключении с другого удаленного компьютера клиент ADO.Net обычно использует протокол TCP / IP для подключения к SQL Server 2008. При локальном подключении (клиент ADO.Net и SQL Server на одном компьютере) обычно используется общая память или именованный канал.
У меня вопрос, помимо общих правил, как точно проверить (например, с помощью некоторых встроенных команд / инструментов / процедур SQL Server?), Какой протокол связи используется конкретным соединением?
заранее спасибо, Джордж
Если у вас есть SPID рассматриваемого процесса (от использования чего-то вроде Activity Monitor или sp_who
или sp_who2
), то вы можете выполнить этот запрос на сервере:
SELECT *
FROM sys.dm_exec_connections
WHERE session_id = (SPID);
замена (SPID) фактическим SPID вашего клиентского процесса. Посмотрите на net_transport
столбец, который расскажет вам, какой протокол этот процесс использует для связи с SQL Server. Если все, что вас интересует, это протокол, просто используйте SELECT net_transport
вместо того SELECT *
.
Вы также можете отфильтровать свой запрос по другим столбцам, таким как client_net_address, который для TCP-соединений будет IP-адресом вашего клиентского компьютера. Вы можете отправить этот запрос через интерфейсы ADO.NET. SQL SMO тоже может что-то иметь.
Вот Справочная страница MSDN для sys.dm_exec_connections. Обратите внимание, что вам потребуются права ПРОСМОТРА СОСТОЯНИЯ СЕРВЕРА на сервере, чтобы видеть не только текущий сеанс.
Вы также можете указать транспортный протокол в server
директивы вашей строки подключения, используя следующий синтаксис:
server=[protocol]:servername
Примеры:
server=tcp:mysqlinstance1 (for TCP/IP)
server=np:mysqlinstance1 (for named pipes)
server=np:\\mysqlinstance1\pipe\pipename (for a specific pipe)
В качестве примечания: TCP / IP или именованные каналы являются протоколом транспортного уровня, а поток табличных данных - протоколом связи (прикладного уровня) в SQL Server.