2009-08-26 6 views
0

私は&を作成するユーティリティクラスを持っているが、DB接続を返します。VB.net:db接続を取得するためにSharedメソッドを使用すると問題が発生しますか?

Public Shared Function GetConnection() as OracleConnection 
    dim c as New OracleConnection() 
    ... set connection string... 
    c.Open() 
    Return c 
End Function 

は、同じ接続を返す同時通話のリスクはありますか?接続文字列はプールを有効にします。

答えて

1

同時接続性の問題がなくなるたびに新しい接続を返すので、 Sharedメソッドを使用して同じインスタンスへの複数の参照を返す場合は、問題が発生する可能性がありますが、ここで行っていることではありません。

この方法は、毎回データベース接続オブジェクトの新しいインスタンスを常に返す限り、この方法を使用しても安全です。すべての接続プールも常に同じように動作します。その場合、あなたの方法の使用方法で問題が発生することを心配する必要はありません。

1

同時呼び出しの問題を忘れてしまいます。接続プーリングが行われている場合、同じオブジェクトを使用していなくても、同じ基礎となるデータベース接続を絶対に再利用できます。

DBへの接続を開くことは高価な操作になるため、これは一般的に望ましいことです。

接続オブジェクトを別の発信者の下から閉じても心配ですか?もしそうなら、別の回答が指摘したように、あなたが提供したコードで安全だと思います。

+1

プールがありますが、プールマネージャはプールが閉じられるまで接続を再発行しないことを前提としています。その時点でプールマネージャにプールに戻されます。 – chris

0

私はそうは思わない。

cはローカル変数(「スタック変数」)であり、すべての呼び出しが静的なものではないため、cのインスタンスがあるためです。 次に、新しいオブジェクト(接続)を作成してこれを返します。

0

各呼び出しが新しい接続であるため、並行性に問題はありません。

私は1つの変更を加えることができますが、方法をprivateにしてください。

これにより、すべてのデータアクセスコードを1つのクラスに入れて、素早く別のデータアクセスレイヤーを作成することができます。少なくともそれをinternalにして、データアクセスレイヤーが1つのアセンブリに限定されるようにします(これはコードの残りの部分とは別です)。