VSTS 2008 + C#+ ADO.Net + SQL Server 2008を使用しています。別のリモートマシンから接続する場合、通常、TCP/IPプロトコルがADO.NetクライアントによってSQLServer 2008に接続するために使用されます。ローカルに接続する場合(ADO.Netクライアントおよび同じマシン上のSQLServer)、通常は共有メモリまたは名前付きパイプが使用されます。
私の質問は、一般的なルールに加えて、特定の接続で使用されている通信プロトコルを正確に(たとえば、SQL Serverの組み込みコマンド/ツール/ストアドプロシージャから)確認する方法です。
よろしくお願いします、ジョージ
問題のプロセスのSPIDがある場合(アクティビティモニター、sp_who
またはsp_who2
などを使用して)、サーバーで次のクエリを実行できます。
SELECT *
FROM sys.dm_exec_connections
WHERE session_id = (SPID);
(SPID)をクライアントプロセスの実際のSPIDに置き換えます。 net_transport
列を見ると、そのプロセスがSQLServerとの通信に使用しているプロトコルがわかります。興味があるのがプロトコルだけの場合は、SELECT net_transport
の代わりにSELECT *
を使用してください。
また、client_net_addressなどの他の列でクエリをフィルタリングすることもできます。client_net_addressは、TCP接続の場合、クライアントマシンのIPアドレスになります。このクエリはADO.NETインターフェイス経由で送信できます。SQL SMOにも何かがあるかもしれません。
これが sys.dm_exec_connections のMSDNリファレンスページです。現在のセッション以外のものを表示するには、サーバーに対するVIEW SERVERSTATE権限が必要になることに注意してください。
次の構文を使用して、接続文字列の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の通信(アプリケーション層)プロトコルです。