Imports System.Data.Odbc
Imports DigitalData.Modules.Logging
Public Class ODBC
Private _Logger As Logger
Private _LogConfig As LogConfig
Private _connectionDatasource As String
Private _connectionUsername As String
Private _connectionPassword As String
Private _connectionString As String
Public Sub New(LogConfig As LogConfig, Datasource As String, User As String, Password As String)
Try
_LogConfig = LogConfig
_Logger = _LogConfig.GetLogger()
_connectionDatasource = Datasource
_connectionPassword = Password
_connectionUsername = User
_connectionString = GetConnectionString(Datasource, User, Password)
_Logger.Debug("Connecting to database..")
' Test the connection
Dim oConnection = GetConnection()
If oConnection Is Nothing Then
Throw New Exceptions.DatabaseException()
End If
' If initial connection was successfully, close it
oConnection.Close()
_Logger.Debug("Connection sucessfully established!")
Catch ex As Exception
_Logger.Error(ex)
End Try
End Sub
Public Function GetConnection() As OdbcConnection
Try
Dim oConnection As New OdbcConnection(_connectionString)
oConnection.Open()
Return oConnection
Catch ex As Exception
_Logger.Error(ex)
Return Nothing
End Try
End Function
Public Function GetConnectionString(Datasource As String, User As String, Password As String) As Object
Return $"DSN={Datasource};UID={User};PWD={Password}"
End Function
'''
''' Executes a non-query command.
'''
''' The command to execute
''' The Firebird connection to use
''' True, if command was executed sucessfully. Otherwise false.
Public Function ExecuteNonQueryWithConnection(SqlQuery As String, Connection As OdbcConnection) As Object
_Logger.Debug("Fetching Non-Query: {0}", SqlQuery)
Dim oResult As Object
If Connection Is Nothing Then
_Logger.Warn("Connection is nothing!")
Return Nothing
End If
Try
Dim oCommand As New OdbcCommand(SqlQuery, Connection)
oResult = oCommand.ExecuteNonQuery()
Catch ex As Exception
_Logger.Error(ex, $"Error in ExecuteNonQueryWithConnection while executing command: '{SqlQuery}'")
Throw ex
End Try
Return oResult
End Function
'''
''' Executes a non-query command.
'''
''' The command to execute
''' True, if command was executed sucessfully. Otherwise false.
Public Function ExecuteNonQuery(SqlCommand As String) As Boolean
Dim oConnection As OdbcConnection = GetConnection()
Dim oScalarValue As Object = ExecuteNonQueryWithConnection(SqlCommand, oConnection)
oConnection.Close()
Return oScalarValue
End Function
'''
''' Executes a sql query resulting in a scalar value.
'''
''' The query to execute
''' The Firebird connection to use
''' The scalar value if the command was executed successfully. Nothing otherwise.
Public Function GetScalarValueWithConnection(SqlQuery As String, Connection As OdbcConnection) As Object
_Logger.Debug("Fetching Datatable: {0}", SqlQuery)
Dim oResult As Object
If Connection Is Nothing Then
_Logger.Warn("Connection is nothing!")
Return Nothing
End If
Try
Dim oCommand As New OdbcCommand(SqlQuery, Connection)
oResult = oCommand.ExecuteScalar()
Catch ex As Exception
_Logger.Error(ex, $"Error in GetDatatableWithConnection while executing command: '{SqlQuery}'")
Throw ex
End Try
Return oResult
End Function
'''
''' Executes a sql query resulting in a table of values.
'''
''' The query to execute
''' A datatable containing the results if the command was executed successfully. Nothing otherwise.
Public Function GetScalarValue(SqlQuery As String) As Object
Dim oConnection As OdbcConnection = GetConnection()
Dim oDatatable As DataTable = GetDatatableWithConnection(SqlQuery, oConnection)
oConnection.Close()
Return oDatatable
End Function
'''
''' Executes a sql query resulting in a table of values.
'''
''' The query to execute
''' The Firebird connection to use
''' A datatable containing the results if the command was executed successfully. Nothing otherwise.
Public Function GetDatatableWithConnection(SqlQuery As String, Connection As OdbcConnection) As DataTable
_Logger.Debug("Fetching Datatable: {0}", SqlQuery)
Dim oDatatable As New DataTable() With {
.TableName = "DDRESULT"
}
If Connection Is Nothing Then
_Logger.Warn("Connection is nothing!")
Return Nothing
End If
Try
Dim oAdapter As New OdbcDataAdapter(SqlQuery, Connection)
oAdapter.Fill(oDatatable)
Catch ex As Exception
_Logger.Error(ex, $"Error in GetDatatableWithConnection while executing command: '{SqlQuery}'")
Throw ex
End Try
Return oDatatable
End Function
'''
''' Executes a sql query resulting in a table of values.
'''
''' The query to execute
''' A datatable containing the results if the command was executed successfully. Nothing otherwise.
Public Function GetDatatable(SqlQuery As String) As DataTable
Dim oConnection As OdbcConnection = GetConnection()
Dim oDatatable As DataTable = GetDatatableWithConnection(SqlQuery, oConnection)
oConnection.Close()
Return oDatatable
End Function
End Class