2008-09-11 22 views
2

コンサルタントがチェックインして、SQLCLRを使用していることを確認したコードを確認しました。私はそれについて何も経験していないので、私はそれについて何かを研究するだろうと思った。私は、彼らはそれが最初にlocalhostのだから、私はどのような違いを思ったんだけどSQLCLRの接続文字列の違い

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

代わりの

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

を使用していることに気づきましたか?

答えて

5

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

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

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

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

1

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

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

最初のSQL接続は、接続文字列で指定されたサーバーに接続するときの標準SQL接続と同じように動作します。新しいネイティブSQL接続を使用して新しい接続が作成されます。これは、他のオフィス電話の公衆電話番号の全部をダイヤルするのと同じように動作します。もちろん、ローカルマシンに接続していますが、接続は別の方法でルーティングされています。

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

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

Peter