This appendix will show you the entire data factory class that we referred to in Chapter 9. Because it is so long, we have chosen to include it as a separate appendix. To download it as source code directly, please see http://www.apress.com, where you can also find all other source code for this book.
Imports System Imports System.Data Imports System.Data.OleDb Imports System.Data.Odbc Imports System.Data.SqlClient Imports System.Reflection Namespace DataUtils.ProviderFactory Public Enum ProviderType OleDb = 0 Odbc SqlClient End Enum 'ProviderType Public Class ProviderFactory #Region "private variables" Private Shared _connectionTypes() As Type = {GetType(OleDbConnection), _ GetType(OdbcConnection), GetType(SqlConnection)} Private Shared _commandTypes() As Type = {GetType(OleDbCommand), _ GetType(OdbcCommand ), GetType(SqlCommand)} Private Shared _dataAdapterTypes() As _ Type = {GetType(OleDbDataAdapter), _ GetType(OdbcDataAdapter), GetType(SqlDataAdapter)} Private Shared _dataParameterTypes() As Type = {GetType(OleDbParameter), GetType(OdbcParameter), GetType(SqlParameter)} Private _provider As ProviderType #End Region #Region "Constructors" Private Sub New() ' force user to specify provider End Sub 'New Public Sub New(ByVal provider As ProviderType) _provider = provider End Sub 'New #End Region #Region "Provider property" Public Property Provider() As ProviderType Get Return _provider End Get Set(ByVal Value As ProviderType) _provider = Value End Set End Property #End Region #Region "IDbConnection methods" Public Overloads Function CreateConnection() As IDbConnection Dim conn As IDbConnection = Nothing Try conn = CType(Activator.CreateInstance(_connectionTypes(CInt(_provider))), _ IDbConnection) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return conn End Function 'CreateConnection Public Overloads Function CreateConnection(ByVal connectionString As String) _ As IDbConnection Dim conn As IDbConnection = Nothing Dim args() As Object = {connectionString} Try conn = CType(Activator.CreateInstance(_connectionTypes(CInt(_provider)), args), _ IDbConnection) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return conn End Function 'CreateConnection #End Region #Region "IDbCommand methods" Public Overloads Function CreateCommand() As IDbCommand Dim cmd As IDbCommand = Nothing Try cmd = CType(Activator.CreateInstance(_commandTypes(CInt(_provider))), _ IDbCommand) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return cmd End Function 'CreateCommand Public Overloads Function CreateCommand(ByVal cmdText As String) As _ IDbCommand Dim cmd As IDbCommand = Nothing Dim args() As Object = CType(cmdText, Object) Try cmd = CType(Activator.CreateInstance(_commandTypes(CInt(_provider)), _ args), IDbCommand) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return cmd End Function 'CreateCommand Public Overloads Function CreateCommand(ByVal cmdText As String, _ ByVal connection As IDbConnection) As IDbCommand Dim cmd As IDbCommand = Nothing Dim args() As Object = {cmdText, connection} Try cmd = CType(Activator.CreateInstance(_commandTypes(CInt(_provider)), _ args), IDbCommand) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return cmd End Function 'CreateCommand Public Overloads Function CreateCommand(ByVal cmdText As String, _ ByVal connection As IDbConnection, _ ByVal transaction As IDbTransaction) As IDbCommand Dim cmd As IDbCommand = Nothing Dim args() As Object = {cmdText, connection, transaction} Try cmd = CType(Activator.CreateInstance(_commandTypes(CInt(_provider)), _ args), IDbCommand) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return cmd End Function 'CreateCommand #End Region #Region "IDbDataAdapter methods" Public Overloads Function CreateDataAdapter() As IDbDataAdapter Dim da As IDbDataAdapter = Nothing Try da = CType(Activator.CreateInstance(_dataAdapterTypes(CInt(_provider))), _ IDbDataAdapter) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return da End Function 'CreateDataAdapter Public Overloads Function CreateDataAdapter(ByVal selectCommand As IDbCommand) _ As IDbDataAdapter Dim da As IDbDataAdapter = Nothing Dim args() As Object = {selectCommand} Try da = CType(Activator.CreateInstance(_dataAdapterTypes(CInt(_provider)), args), _ IDbDataAdapter) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return da End Function 'CreateDataAdapter Public Overloads Function CreateDataAdapter(ByVal selectCommandText As String, _ ByVal selectConnection As IDbConnection) As IDbDataAdapter Dim da As IDbDataAdapter = Nothing Dim args() As Object = {selectCommandText, selectConnection} Try da = CType(Activator.CreateInstance(_dataAdapterTypes(CInt(_provider)), _ args), IDbDataAdapter) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return da End Function 'CreateDataAdapter Public Overloads Function CreateDataAdapter(ByVal selectCommandText As String, _ ByVal selectConnectionString As String) As IDbDataAdapter Dim da As IDbDataAdapter = Nothing Dim args() As Object = {selectCommandText, selectConnectionString} Try da = CType(Activator.CreateInstance(_dataAdapterTypes(CInt(_provider)), _ args), IDbDataAdapter) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return da End Function 'CreateDataAdapter #End Region #Region "IDbDataParameter methods" Public Overloads Function CreateDataParameter() As IDbDataParameter Dim param As IDbDataParameter = Nothing Try param = CType(Activator.CreateInstance(_dataParameterTypes(CInt(_provider))), _ IDbDataParameter) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, _ e.InnerException) End Try Return param End Function 'CreateDataParameter Public Overloads Function CreateDataParameter(ByVal parameterName As String, _ ByVal value As Object) As IDbDataParameter Dim param As IDbDataParameter = Nothing Dim args() As Object = {parameterName, value} Try param = CType(Activator.CreateInstance(_dataParameterTypes(CInt(_provider)), _ args), IDbDataParameter) Catch e As TargetInvocationException Throw New SystemException(e.InnerException.Message, e.InnerException) End Try Return param End Function 'CreateDataParameter Public Overloads Function CreateDataParameter(ByVal parameterName As String, _ ByVal dataType As DbType) As IDbDataParameter Dim param As IDbDataParameter = CreateDataParameter() If Not (param Is Nothing) Then param.ParameterName = parameterName param.DbType = dataType End If Return param End Function 'CreateDataParameter Public Overloads Function CreateDataParameter(ByVal parameterName As String, _ ByVal dataType As DbType, ByVal size As Integer) As IDbDataParameter Dim param As IDbDataParameter = CreateDataParameter() If Not (param Is Nothing) Then param.ParameterName = parameterName param.DbType = dataType param.Size = size End If Return param End Function 'CreateDataParameter Public Overloads Function CreateDataParameter(ByVal parameterName As String, _ ByVal dataType As DbType, _ ByVal size As Integer, _ ByVal sourceColumn As String) As IDbDataParameter Dim param As IDbDataParameter = CreateDataParameter() If Not (param Is Nothing) Then param.ParameterName = parameterName param.DbType = dataType param.Size = size param.SourceColumn = sourceColumn End If Return param End Function 'CreateDataParameter #End Region End Class 'ProviderFactory End Namespace 'DataUtils.ProviderFactory