DB接続を拡張メソッド&デリゲートで実装する(ver.2015)
DB接続処理(Connection、Transaction)は頻出するので、極力少ないコードで、かつ開閉ミスの内容に実装してみます。*1
Imports System.Runtime.CompilerServices Public Module IDbConnectionExtension <Extension> Public Sub Connect(source As IDbConnection, core As Action(Of IDbConnection)) If source Is Nothing Then Throw New ArgumentNullException("source") If core Is Nothing Then Throw New ArgumentNullException("core") Try source.Open() core.Invoke(source) Finally source.Dispose() End Try End Sub <Extension> Public Sub Transact(source As IDbConnection, core As Action(Of IDbTranasction)) If source Is Nothing Then Throw New ArgumentNullException("source") If core Is Nothing Then Throw New ArgumentNullException("core") Try source.Open() Using trn = source.BeginTransaction Try core.Invoke(trn) trn.Commit() Catch ex As Exception trn.Rollback() Throw End Try End Using Finally source.Dispose() End Try End Sub End Module
拡張メソッド内で接続処理をして、接続中にメイン処理をコールバックする。それだけ。 使い方はこんな感じ。
Dim cn = New Data.SqlClient.SqlConnection(My.Resources.SQL_SERVER_CNSTRING) cn.Connect( Sub() Dim cmd = cn.CreateCommand '略 End Sub)
Dim cn = New Data.SqlClient.SqlConnection(My.Resources.SQL_SERVER_CNSTRING) cn.Transact( Sub(trn) Dim cmd = trn.Connection.CreateCommand cmd.Transaction = trn '略 End Sub)
接続文字列処理は手を抜いてますので、手を抜かない方法は以下参照。