CreateDataAdapter - Creating a DataAdapter for a given connection object, via Reflection
' Create a suitable DataAdapter object for a given connection object.
' Example:
' Dim da As DbDataAdapter = CreateDataAdapter(cn, "SELECT * FROM Titles")
Function CreateDataAdapter(ByVal cn As IDbConnection, _
ByVal sql As String) As DbDataAdapter
' We must box CN to invoke the GetType method.
Dim cnType As Type = CObj(cn).GetType()
' The complete name of the assembly where the connection is defined.
Dim asmName As String = CObj(cn).GetType().Assembly.FullName
' The complete names of the DataAdapter and CommandBuilder objects
Dim daTypeName As String = cnType.FullName.Replace("Connection", _
"DataAdapter")
' Create the DataAdapter via Reflection.
Dim daType As Type = Type.GetType(daTypeName & "," & asmName)
Dim args() As Object = {sql, cn}
Dim da As DbDataAdapter = DirectCast(Activator.CreateInstance(daType, args), _
DbDataAdapter)
' Create the CommandBuilder via reflection.
Dim cbTypeName As String = cnType.FullName.Replace("Connection", _
"CommandBuilder")
Dim cbType As Type = Type.GetType(cbTypeName & "," & asmName)
Dim args2() As Object = {da}
Dim cb As Object = Activator.CreateInstance(cbType, args2)
Return da
End Function