我正在使用 VSTS 2008 + C# + ADO.Net + SQL Server 2008。从另一台远程计算机连接时,ADO.Net 客户端通常使用 TCP/IP 协议连接到 SQL Server 2008。本地连接时(ADO.Net 客户端和 SQL Server 在同一台机器上),通常使用共享内存或命名管道。
我的问题是,除了一般规则之外,如何准确检查(例如,从一些 SQL Server 内置命令/工具/存储过程?)特定连接使用什么通信协议?
提前谢谢,乔治
我正在使用 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
or之类的东西sp_who2
),那么您可以在服务器上执行此查询:将 (SPID) 替换为客户端进程的实际 SPID。查看该
net_transport
列,它将告诉您该进程使用哪种协议与 SQL Server 进行通信。如果您只对协议感兴趣,请使用SELECT net_transport
而不是SELECT *
.您还可以按其他列过滤查询,例如 client_net_address,对于 TCP 连接,它将是您的客户端计算机的 IP 地址。您可以通过 ADO.NET 接口发送此查询。SQL SMO 也可能有一些东西。
这是sys.dm_exec_connections 的 MSDN 参考页面。请注意,您将需要服务器上的 VIEW SERVER STATE 权限才能查看更多内容,而不仅仅是当前会话。
您还可以
server
使用以下语法在连接字符串的指令中指定传输协议:例子:
附带说明:TCP/IP 或命名管道是传输层协议,表格数据流是 SQL Server 中的通信(应用层)协议。
http://en.wikipedia.org/wiki/Tabular_Data_Stream