64 lines
2.1 KiB
VB.net
64 lines
2.1 KiB
VB.net
Imports DigitalData.Modules.Database
|
|
Imports DigitalData.Modules.EDMI.API
|
|
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
|
|
Imports DigitalData.Modules.Logging
|
|
|
|
Public Class MSSQLServerCached
|
|
Private _Logger As Logger
|
|
Private _Client As Client
|
|
Private _DatabaseEDM As MSSQLServer
|
|
Private _DatabaseIDB As MSSQLServer
|
|
Private _Type As DatabaseType
|
|
|
|
Public Enum DatabaseType
|
|
ECM
|
|
IDB
|
|
End Enum
|
|
|
|
Public Sub New(LogConfig As LogConfig, Client As Client, DatabaseECM As MSSQLServer, DatabaseIDB As MSSQLServer)
|
|
_Logger = LogConfig.GetLogger()
|
|
_Client = Client
|
|
_DatabaseEDM = DatabaseECM
|
|
_DatabaseIDB = DatabaseIDB
|
|
End Sub
|
|
|
|
Public Function GetDatatable(DataTable As String, FilterExpression As String, SortByColumn As String, FallbackSQL As String, FallbackType As DatabaseType, Optional ForceFallback As Boolean = False) As DataTable
|
|
Try
|
|
Dim oResult As DataTable = Nothing
|
|
|
|
If ForceFallback = False Then
|
|
Dim oTableResult As TableResult = _Client.GetDatatableByName(DataTable, FilterExpression, SortByColumn)
|
|
|
|
If oTableResult Is Nothing OrElse oTableResult.OK = False Then
|
|
_Logger.Warn("Datatable [{0}] could not be fetched from AppServer Cache. Falling back to direct Database Access.")
|
|
End If
|
|
Else
|
|
Return GetDatatableFromDatabase(FallbackSQL, FallbackType)
|
|
End If
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
|
|
Private Function GetDatatableFromDatabase(SQLCommand As String, DatabaseType As DatabaseType)
|
|
Try
|
|
Select Case DatabaseType
|
|
Case DatabaseType.ECM
|
|
Return _DatabaseEDM.GetDatatable(SQLCommand)
|
|
|
|
Case DatabaseType.IDB
|
|
Return _DatabaseIDB.GetDatatable(SQLCommand)
|
|
|
|
Case Else
|
|
Return Nothing
|
|
|
|
End Select
|
|
Catch ex As Exception
|
|
_Logger.Error(ex)
|
|
Return Nothing
|
|
|
|
End Try
|
|
End Function
|
|
End Class
|