データベース通信(IMHO)の最良のアプローチはこれです。
接続を作成
接続
コマンドを作成
クエリを実行
破棄コマンド
接続を破棄
これは、すべてのクエリに対して接続を作成するために、多くのオーバーヘッドとパフォーマンス キラーのようです。ただし、ほとんどの .NET Dataprovider はプーリングをサポートしているため、基本的に開いている接続は引き続き存在し、有効であり、次の要求で再利用されます。
このアプローチは、connection.State
これに 100% 依存することはできず、TnsPing
for every クエリを実行するよりも高速であるため、実行するよりもはるかに優れています。
Oracle の接続プール: http://msdn.microsoft.com/en-us/library/aa719767(v=vs.71).aspx
コード例:
Public Static Readonly ConnectionString = "Data Source=MyOracleServer;Integrated Security=yes;"
Public Shared Function ExecuteScalar(of T)(string commandString)
Using con As new OracleConnection(connectionString)
con.Open()
Using cmd As new OracleCommand(con, commandString)
Return CType(cmd.ExecuteScalar(), T)
End Using
End Using ' this one will call con.Dispose() which will close the connection
End Function
この単純なコードを使用すると、データベースと通信する Web サイトの場合と同じように、コネクションレスのアプローチが得られます。必要なのは、巧妙な例外処理だけです (サービス アプリケーションではそれほど難しいことではありません。グローバルな例外ハンドラーを使用し、例外をイベント ログにダンプして、後で再試行してください。