2

コンサルタントがチェックインしたいくつかのコードを確認していて、彼らが SQLCLR を使用していることに気付きました。私はそれについての経験がないので、それが何であるかを研究しようと思いました。私は彼らが使用していることに気づきました

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

それ以外の

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

最初はlocalhostなので、何が違うのだろうか?

4

2 に答える 2

6

コンテキスト接続は、ユーザーが既に確立したサーバーへの接続を使用します。したがって、データベース コンテキスト、接続オプションなどを継承します。

localhost を使用すると、通常の共有メモリ接続を使用してサーバーに接続されます。これは、ユーザーの接続を使用したくない場合 (つまり、別のデータベースに接続したい場合や、別のオプションで接続したい場合など) に役立ちます。

サーバーへの個別の接続を作成しないため、ほとんどの場合、コンテキスト接続を使用する必要があります。

また、別の接続を使用することは、ユーザーのトランザクションの一部ではなく、通常のロック セマンティクスの対象となることを意味することに注意してください。

于 2008-09-11T15:19:57.637 に答える
1

大規模なオフィスの電話システムを考えてみましょう:

私のオフィスには内線電話システムがあります。ただし、すべての電話には外部電話番号 (実際の TELCO 回線のグループの 1 つを利用する仮想番号) もあります。別のオフィスの内線番号に直接ダイヤルして電話をかけると、その電話は社内の電話システム (1 ホップ) を経由してルーティングされます。別の方法として、その電話の公衆電話番号にダイヤルすると、コールは建物のシステムから TELCO 交換局にルーティングされ、建物のシステムを経由してオフィスの内線に戻ります (3 ホップ)。

最初の SQL 接続は、接続文字列で指定されたサーバーに接続するときの標準的な SQL 接続と同じように動作します。標準のネイティブ SQL 接続を使用して、新しい接続が作成されます。これは、別のオフィスの電話の完全な公衆電話番号をダイヤルするのと同じように動作します。確かに、ローカル マシンに接続していますが、接続の経路が異なります。

コンテキスト接続には、SQLCLR オブジェクトを実行している既存の接続を使用する新しい SqlConnection インスタンスがあります。既存の/ローカル コンテキストを使用しています。これは、オフィス メイトの内線番号に直接ダイヤルするようなものです。ローカル コンテキストとより効率的です。

私は肯定的ではありませんが、コンテキスト接続を使用すると、SQLCLR オブジェクトへの呼び出しもコンテキストのトランザクションに参加すると思います。私が間違っている場合は、誰かが私を修正してください。

ピーター

于 2008-09-11T15:27:02.847 に答える