diff --git a/Database/Adapters/MSSQLServer.vb b/Database/Adapters/MSSQLServer.vb index 59be8881..c88088cb 100644 --- a/Database/Adapters/MSSQLServer.vb +++ b/Database/Adapters/MSSQLServer.vb @@ -75,7 +75,7 @@ Public Class MSSQLServer ''' ''' Decrypts a connection string password. ''' - ''' A connection string with a encrypted password + ''' A connection string with an encrypted password ''' The connection string with the password decrypted. Public Shared Function DecryptConnectionString(pConnectionString As String) As String @@ -87,6 +87,11 @@ Public Class MSSQLServer Return oBuilder.ToString() End Function + + Private Function IDatabase_DecryptConnectionString(pConnectionString As String) As String Implements IDatabase.DecryptConnectionString + Return DecryptConnectionString(pConnectionString) + End Function + Public Function GetConnectionString(Server As String, Database As String, UserId As String, Password As String) As String Dim oConnectionStringBuilder As New SqlConnectionStringBuilder() With { @@ -146,7 +151,7 @@ Public Class MSSQLServer End Select End Function - Public Function GetConnectionStringForId(pConnectionId As Integer) As String + Public Function GetConnectionStringForId(pConnectionId As Integer) As String Implements IDatabase.GetConnectionStringForId Return Get_ConnectionStringforID(pConnectionId) End Function Public Function GetGDPictureString() As String @@ -194,14 +199,6 @@ Public Class MSSQLServer Else oConnectionString = $"Server={oServer};Database={oDatabase};User Id={oUser};Password={oPassword};" End If - - Case "ORACLE" - If oRow.Item("BEMERKUNG").ToString.Contains("without tnsnames") Then - oConnectionString = $"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={oServer})(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={oDatabase})));User Id={oUser};Password={oPassword};" - Else - oConnectionString = $"Data Source={oServer};Persist Security Info=True;User Id={oUser};Password={oPassword};Unicode=True" - End If - Case Else Logger.Warn("Provider [{0}] not supported!", oProvider) @@ -213,7 +210,7 @@ Public Class MSSQLServer Catch ex As Exception Logger.Error(ex) - Logger.Warn("Error in Get_ConnectionStringforID") + Logger.Warn("Error in Get_ConnectionStringforID (MSSQLServer.VB)") End Try Return DecryptConnectionString(oConnectionString) diff --git a/Database/Adapters/Oracle.vb b/Database/Adapters/Oracle.vb index 4f6e1800..87f90ef5 100644 --- a/Database/Adapters/Oracle.vb +++ b/Database/Adapters/Oracle.vb @@ -10,7 +10,53 @@ Public Class Oracle Private ReadOnly _Timeout As Integer Private ReadOnly _Logger As Logger + Public Function GetConnectionStringForId(pConnectionId As Integer) As String Implements IDatabase.GetConnectionStringForId + Return Get_ConnectionStringforID(pConnectionId) + End Function + Public Function Get_ConnectionStringforID(pConnectionId As Integer) As String + Dim oConnectionString As String = String.Empty + _Logger.Debug("Getting ConnectionString for ConnectionId [{0}]", pConnectionId) + + If pConnectionId = 0 Then + _Logger.Warn("ConnectionId was 0. Falling back to default connection.") + Return String.Empty + End If + + Try + Dim oTable As DataTable = GetDatatable($"SELECT * FROM TBDD_CONNECTION WHERE GUID = {pConnectionId}") + If oTable.Rows.Count = 1 Then + Dim oRow As DataRow = oTable.Rows(0) + Dim oProvider = oRow.Item("SQL_PROVIDER").ToString.ToUpper + Dim oServer = oRow.Item("SERVER") + Dim oDatabase = oRow.Item("DATENBANK") + Dim oUser = oRow.Item("USERNAME") + Dim oPassword = oRow.Item("PASSWORD") + + Select Case oProvider + Case "ORACLE" + If oRow.Item("BEMERKUNG").ToString.Contains("without tnsnames") Then + oConnectionString = $"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={oServer})(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={oDatabase})));User Id={oUser};Password={oPassword};" + Else + oConnectionString = $"Data Source={oServer};Persist Security Info=True;User Id={oUser};Password={oPassword};Unicode=True" + End If + + Case Else + _Logger.Warn("Provider [{0}] not supported!", oProvider) + + End Select + + Else + _Logger.Warn("No entry for Connection-ID: [{0}] ", pConnectionId.ToString) + End If + + Catch ex As Exception + _Logger.Error(ex) + _Logger.Warn("Error in Get_ConnectionStringforID (Oracle.VB)") + End Try + + Return DecryptConnectionString(oConnectionString) + End Function Public Sub New(LogConfig As LogConfig, ConnectionString As String, Optional Timeout As Integer = 120) _Timeout = Timeout _Logger = LogConfig.GetLogger() @@ -66,7 +112,7 @@ Public Class Oracle ''' A connection string with a encrypted password ''' The connection string with the password decrypted. - Public Shared Function DecryptConnectionString(ConnectionString As String) As String + Public Function DecryptConnectionString(ConnectionString As String) As String Implements IDatabase.DecryptConnectionString Dim oEncryption As New EncryptionLegacy() Dim oBuilder As New OracleConnectionStringBuilder() With {.ConnectionString = ConnectionString} Dim oDecryptedPassword = oEncryption.DecryptData(oBuilder.Password) diff --git a/Database/IDatabase.vb b/Database/IDatabase.vb index 31d5541c..1c2b2b2e 100644 --- a/Database/IDatabase.vb +++ b/Database/IDatabase.vb @@ -17,4 +17,7 @@ Public Interface IDatabase Function GetScalarValue(SQLQuery As String, Timeout As Integer) As Object Function GetScalarValue(SQLQuery As String) As Object + + Function GetConnectionStringForId(ConnectionId As Integer) As String + Function DecryptConnectionString(pConnectionString As String) As String End Interface