SQL ServerデータベースまたはMS Accessデータベースのいずれかを使用するプログラムがあります。MS AccessまたはSQL Serverのコード
私は同じコードでどちらかのデータベースを使用する方法を見つけようとしています。
SQL Serverの:
Using cmd As SqlCommand = New SqlCommand(SQLQuery, Connection)
Using rs As SqlDataReader = cmd.ExecuteReader
Do While rs.Read
' Do something
Loop
End Using
End Using
MSアクセス:例として、あなたは、あなたが使っているものをDBに応じて、folowingを行うだろう私の場合は
Using cmd As OleDbCommand= New OleDbCommand(SQLQuery, Connection)
Using rs As OleDbDataReader= cmd.ExecuteReader
Do While rs.Read
' Do something
Loop
End Using
End Using
を、私のような何かを実装することができこの:
Dim rs As New Object
Dim con As Object
Dim cmd As Object
If SQL-Server Then
con = TryCast(conSQL-Server, SqlConnection)
cmd = New SqlCommand
rs = TryCast(rs, SqlDataReader)
Else
con = TryCast(conMS-Access, OleDb.OleDbConnection)
cmd = New OleDb.OleDbCommand
rs = TryCast(rs, OleDb.OleDbDataReader)
End If
Try
With cmd
.Connection = con
.CommandText = SQLQuery
rs = .ExecuteReader
End With
Do While rs.Read
' Do something
Loop
Catch ex As Exception
' Handle Error
Finally
If Not rs Is Nothing Then
If Not rs.IsClosed Then rs.Close()
rs.Dispose()
End If
cmd.Dispose()
End Try
しかし、それは面倒です。
If SQL-Server Then
DBCommand = SqlCommand
DBReader = SqlDataReader
Else
DBCommand = OleDbCommand
DBReader = OleDbDataReader
End
Using cmd As DBCommand = New DBCommand(SQLQuery, connection)
Using rs As DBReader = cmd.ExecuteReader
Do While rs.Read
' Do something
Loop
End Using
End Using
任意のアイデアをお持ちの場合は、カスタムタイプを作成できます。
インターフェイスとして扱った場合(たとえば、IDbCommand')、共通のインターフェイスを共有する必要があります。それは、特別なセットアップコードがある第2のシナリオと似ていますが、残りの部分を同じオブジェクトであるかのように扱います。データリーダーにはIDataReaderなどがあります。 – ps2goat
その例がありますか?私はそれを調べましたが、本当に何も見つかりませんでした。 –
ここには単純な例があります。https://msdn.microsoft.com/en-us/library/system.data.idbconnection(v=vs.110).aspxこれは、さまざまな種類のコマンドを'IDbCommand'。このアプローチは、あなたが望むアプローチを満たすためにスケールアウトすることができます。 – ps2goat