Database: Fix connection string error

This commit is contained in:
Jonathan Jenne 2022-09-28 14:09:37 +02:00
parent 1632e86c1e
commit 711d0edd04
5 changed files with 41 additions and 58 deletions

View File

@ -9,7 +9,7 @@ Public Class MSSQLServer
Implements IDatabase Implements IDatabase
Public Property DBInitialized As Boolean = False Implements IDatabase.DBInitialized Public Property DBInitialized As Boolean = False Implements IDatabase.DBInitialized
Public Property ConnectionString As String = "" Implements IDatabase.ConnectionString Public Property CurrentConnectionString As String = "" Implements IDatabase.CurrentConnectionString
Private ReadOnly QueryTimeout As Integer Private ReadOnly QueryTimeout As Integer
Private ReadOnly Logger As Logger Private ReadOnly Logger As Logger
@ -28,8 +28,8 @@ Public Class MSSQLServer
QueryTimeout = pTimeout QueryTimeout = pTimeout
Try Try
DBInitialized = TestCanConnect() CurrentConnectionString = pConnectionString
ConnectionString = pConnectionString DBInitialized = TestCanConnect(CurrentConnectionString)
Catch ex As Exception Catch ex As Exception
DBInitialized = False DBInitialized = False
Logger.Error(ex) Logger.Error(ex)
@ -41,8 +41,8 @@ Public Class MSSQLServer
QueryTimeout = Timeout QueryTimeout = Timeout
Try Try
DBInitialized = TestCanConnect() CurrentConnectionString = GetConnectionString(Server, Database, UserId, Password)
ConnectionString = GetConnectionString(Server, Database, UserId, Password) DBInitialized = TestCanConnect(CurrentConnectionString)
Catch ex As Exception Catch ex As Exception
DBInitialized = False DBInitialized = False
Logger.Error(ex) Logger.Error(ex)
@ -52,12 +52,12 @@ Public Class MSSQLServer
''' <summary> ''' <summary>
''' Encrypts a connection string password. ''' Encrypts a connection string password.
''' </summary> ''' </summary>
''' <param name="ConnectionString">A connection string with a plain-text password</param> ''' <param name="pConnectionString">A connection string with a plain-text password</param>
''' <returns>The connection string with the password encrypted.</returns> ''' <returns>The connection string with the password encrypted.</returns>
<DebuggerStepThrough()> <DebuggerStepThrough()>
Public Shared Function EncryptConnectionString(ConnectionString As String) As String Public Shared Function EncryptConnectionString(pConnectionString As String) As String
Dim oEncryption As New EncryptionLegacy() Dim oEncryption As New EncryptionLegacy()
Dim oBuilder As New SqlConnectionStringBuilder() With {.ConnectionString = ConnectionString} Dim oBuilder As New SqlConnectionStringBuilder() With {.ConnectionString = pConnectionString}
Dim oEncryptedPassword = oEncryption.EncryptData(oBuilder.Password) Dim oEncryptedPassword = oEncryption.EncryptData(oBuilder.Password)
oBuilder.Password = oEncryptedPassword oBuilder.Password = oEncryptedPassword
@ -67,12 +67,12 @@ Public Class MSSQLServer
''' <summary> ''' <summary>
''' Decrypts a connection string password. ''' Decrypts a connection string password.
''' </summary> ''' </summary>
''' <param name="ConnectionString">A connection string with a encrypted password</param> ''' <param name="pConnectionString">A connection string with a encrypted password</param>
''' <returns>The connection string with the password decrypted.</returns> ''' <returns>The connection string with the password decrypted.</returns>
<DebuggerStepThrough()> <DebuggerStepThrough()>
Public Shared Function DecryptConnectionString(ConnectionString As String) As String Public Shared Function DecryptConnectionString(pConnectionString As String) As String
Dim oEncryption As New EncryptionLegacy() Dim oEncryption As New EncryptionLegacy()
Dim oBuilder As New SqlConnectionStringBuilder() With {.ConnectionString = ConnectionString} Dim oBuilder As New SqlConnectionStringBuilder() With {.ConnectionString = pConnectionString}
Dim oDecryptedPassword = oEncryption.DecryptData(oBuilder.Password) Dim oDecryptedPassword = oEncryption.DecryptData(oBuilder.Password)
oBuilder.Password = oDecryptedPassword oBuilder.Password = oDecryptedPassword
@ -195,14 +195,14 @@ Public Class MSSQLServer
<DebuggerStepThrough()> <DebuggerStepThrough()>
Private Function TestCanConnect() As Boolean Private Function TestCanConnect() As Boolean
Return TestCanConnect(ConnectionString) Return TestCanConnect(CurrentConnectionString)
End Function End Function
Private Function TestCanConnect(ConnectionString As String) As Boolean Private Function TestCanConnect(pConnectionString As String) As Boolean
Try Try
Logger.Debug("Testing connection to [{0}]", MaskConnectionString(ConnectionString)) Logger.Debug("Testing connection to [{0}]", MaskConnectionString(pConnectionString))
Dim oDecryptedConnectionString = DecryptConnectionString(ConnectionString) Dim oDecryptedConnectionString = DecryptConnectionString(pConnectionString)
Dim oConnection As New SqlConnection(oDecryptedConnectionString) Dim oConnection As New SqlConnection(oDecryptedConnectionString)
OpenSQLConnection(oConnection) OpenSQLConnection(oConnection)
oConnection.Close() oConnection.Close()
@ -213,24 +213,6 @@ Public Class MSSQLServer
End Try End Try
End Function End Function
Private Function TestCanConnect(Connection As SqlConnection) As Boolean
Try
If Connection Is Nothing Then
Logger.Warn("TestCanConnect: Connection is nothing!")
Return False
End If
Logger.Debug("Testing connection to [{0}]", MaskConnectionString(Connection.ConnectionString))
OpenSQLConnection(Connection)
Connection.Close()
Return True
Catch ex As Exception
Logger.Error(ex)
Return False
End Try
End Function
''' <summary> ''' <summary>
''' This Function intentionally has no try..catch block to have any errors caught outside ''' This Function intentionally has no try..catch block to have any errors caught outside
''' </summary> ''' </summary>
@ -246,15 +228,15 @@ Public Class MSSQLServer
<DebuggerStepThrough()> <DebuggerStepThrough()>
Private Function GetSQLConnection() As SqlConnection Private Function GetSQLConnection() As SqlConnection
Return GetConnection(ConnectionString) Return GetConnection(CurrentConnectionString)
End Function End Function
Private Function GetConnection(ConnectionString As String) As SqlConnection Private Function GetConnection(pConnectionString As String) As SqlConnection
Try Try
Dim oConnection As New SqlConnection(ConnectionString) Dim oConnection As New SqlConnection(pConnectionString)
oConnection = OpenSQLConnection(oConnection) oConnection = OpenSQLConnection(oConnection)
Dim oMaskedConnectionString = MaskConnectionString(ConnectionString) Dim oMaskedConnectionString = MaskConnectionString(pConnectionString)
Logger.Debug("The Following Connection is open: {0}", oMaskedConnectionString) Logger.Debug("The Following Connection is open: {0}", oMaskedConnectionString)
Return oConnection Return oConnection
@ -266,14 +248,15 @@ Public Class MSSQLServer
End Function End Function
<DebuggerStepThrough()> <DebuggerStepThrough()>
Private Function MaskConnectionString(ConnectionString As String) As String Private Function MaskConnectionString(pConnectionString As String) As String
Try Try
If ConnectionString Is Nothing OrElse ConnectionString.Length = 0 Then If pConnectionString Is Nothing OrElse pConnectionString.Length = 0 Then
Throw New ArgumentNullException("ConnectionString") Logger.Warn("Connection String is empty!")
Throw New ArgumentNullException("pConnectionString")
End If End If
Dim oBuilder As New SqlConnectionStringBuilder() With {.ConnectionString = ConnectionString} Dim oBuilder As New SqlConnectionStringBuilder() With {.ConnectionString = pConnectionString}
Dim oConnectionString = ConnectionString.Replace(oBuilder.Password, "XXXXX") Dim oConnectionString = pConnectionString.Replace(oBuilder.Password, "XXXXX")
Return oConnectionString Return oConnectionString
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)
@ -310,8 +293,8 @@ Public Class MSSQLServer
End Function End Function
'<DebuggerStepThrough()> '<DebuggerStepThrough()>
Public Function GetDatatableWithConnection(SqlCommand As String, ConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable Public Function GetDatatableWithConnection(SqlCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Using oConnection = GetConnection(ConnectionString) Using oConnection = GetConnection(pConnectionString)
Return GetDatatableWithConnectionObject(SqlCommand, oConnection, Timeout:=Timeout) Return GetDatatableWithConnectionObject(SqlCommand, oConnection, Timeout:=Timeout)
End Using End Using
End Function End Function
@ -431,8 +414,8 @@ Public Class MSSQLServer
End Function End Function
'<DebuggerStepThrough()> '<DebuggerStepThrough()>
Public Function GetScalarValueWithConnection(SQLCommand As String, ConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Object Public Function GetScalarValueWithConnection(SQLCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Using oConnection = GetConnection(ConnectionString) Using oConnection = GetConnection(pConnectionString)
Return GetScalarValueWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout) Return GetScalarValueWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout)
End Using End Using
End Function End Function

View File

@ -6,7 +6,7 @@ Public Class Oracle
Implements IDatabase Implements IDatabase
Public Property DBInitialized As Boolean = False Implements IDatabase.DBInitialized Public Property DBInitialized As Boolean = False Implements IDatabase.DBInitialized
Public Property ConnectionString As String = "" Implements IDatabase.ConnectionString Public Property CurrentConnectionString As String = "" Implements IDatabase.CurrentConnectionString
Private ReadOnly _Timeout As Integer Private ReadOnly _Timeout As Integer
Private ReadOnly _Logger As Logger Private ReadOnly _Logger As Logger
@ -23,8 +23,8 @@ Public Class Oracle
_Timeout = Timeout _Timeout = Timeout
_Logger = LogConfig.GetLogger() _Logger = LogConfig.GetLogger()
ConnectionString = GetConnectionString(Server, Database, UserId, Password) CurrentConnectionString = GetConnectionString(Server, Database, UserId, Password)
DBInitialized = TestCanConnect(ConnectionString) DBInitialized = TestCanConnect(CurrentConnectionString)
End Sub End Sub
Private Function TestCanConnect(ConnectionString As String) As Boolean Private Function TestCanConnect(ConnectionString As String) As Boolean
@ -85,7 +85,7 @@ Public Class Oracle
Try Try
Dim oSQLconnect As New OracleConnection Dim oSQLconnect As New OracleConnection
Dim oSQLCOmmand As OracleCommand Dim oSQLCOmmand As OracleCommand
oSQLconnect.ConnectionString = ConnectionString oSQLconnect.ConnectionString = CurrentConnectionString
oSQLconnect.Open() oSQLconnect.Open()
oSQLCOmmand = oSQLconnect.CreateCommand() oSQLCOmmand = oSQLconnect.CreateCommand()
oSQLCOmmand.CommandText = executeStatement oSQLCOmmand.CommandText = executeStatement
@ -111,7 +111,7 @@ Public Class Oracle
Try Try
Dim oSQLconnect As New OracleConnection Dim oSQLconnect As New OracleConnection
Dim oSQLCOmmand As OracleCommand Dim oSQLCOmmand As OracleCommand
oSQLconnect.ConnectionString = ConnectionString oSQLconnect.ConnectionString = CurrentConnectionString
oSQLconnect.Open() oSQLconnect.Open()
oSQLCOmmand = oSQLconnect.CreateCommand() oSQLCOmmand = oSQLconnect.CreateCommand()
oSQLCOmmand.CommandText = executeStatement oSQLCOmmand.CommandText = executeStatement
@ -129,7 +129,7 @@ Public Class Oracle
Public Function GetDatatable(pSQLCommand As String, pTimeout As Integer) As DataTable Implements IDatabase.GetDatatable Public Function GetDatatable(pSQLCommand As String, pTimeout As Integer) As DataTable Implements IDatabase.GetDatatable
Try Try
Using oConnection = GetConnection(ConnectionString) Using oConnection = GetConnection(CurrentConnectionString)
Dim oSQLCommand As OracleCommand Dim oSQLCommand As OracleCommand
oSQLCommand = oConnection.CreateCommand() oSQLCommand = oConnection.CreateCommand()
oSQLCommand.CommandText = pSQLCommand oSQLCommand.CommandText = pSQLCommand
@ -157,7 +157,7 @@ Public Class Oracle
Public Function ExecuteNonQuery(pSQLCommand As String, pTimeout As Integer) As Boolean Implements IDatabase.ExecuteNonQuery Public Function ExecuteNonQuery(pSQLCommand As String, pTimeout As Integer) As Boolean Implements IDatabase.ExecuteNonQuery
Try Try
Using oConnection = GetConnection(ConnectionString) Using oConnection = GetConnection(CurrentConnectionString)
Dim oSQLCOmmand As OracleCommand Dim oSQLCOmmand As OracleCommand
oSQLCOmmand = oConnection.CreateCommand() oSQLCOmmand = oConnection.CreateCommand()
oSQLCOmmand.CommandText = pSQLCommand oSQLCOmmand.CommandText = pSQLCommand
@ -183,7 +183,7 @@ Public Class Oracle
Public Function GetScalarValue(pSQLCommand As String, pTimeout As Integer) As Object Implements IDatabase.GetScalarValue Public Function GetScalarValue(pSQLCommand As String, pTimeout As Integer) As Object Implements IDatabase.GetScalarValue
Dim result Dim result
Try Try
Using oConnection = GetConnection(ConnectionString) Using oConnection = GetConnection(CurrentConnectionString)
Dim oSQLCOmmand As OracleCommand Dim oSQLCOmmand As OracleCommand
oSQLCOmmand = oConnection.CreateCommand() oSQLCOmmand = oConnection.CreateCommand()
oSQLCOmmand.CommandText = pSQLCommand oSQLCOmmand.CommandText = pSQLCommand

View File

@ -5,7 +5,7 @@ Public Interface IDatabase
''' Returns true if the initial connection to the configured database was successful. ''' Returns true if the initial connection to the configured database was successful.
''' </summary> ''' </summary>
Property DBInitialized As Boolean Property DBInitialized As Boolean
Property ConnectionString As String Property CurrentConnectionString As String
Function GetDatatable(SqlCommand As String, Timeout As Integer) As DataTable Function GetDatatable(SqlCommand As String, Timeout As Integer) As DataTable
Function GetDatatable(SqlCommand As String) As DataTable Function GetDatatable(SqlCommand As String) As DataTable

View File

@ -156,8 +156,8 @@ Public Class GlobalState
_Logger.Debug("ForceDirectDatabaseAccess: {0}", pConfig.ClientConfig.ForceDirectDatabaseAccess) _Logger.Debug("ForceDirectDatabaseAccess: {0}", pConfig.ClientConfig.ForceDirectDatabaseAccess)
ClientConfig.ForceDirectDatabaseAccess = pConfig.ClientConfig.ForceDirectDatabaseAccess ClientConfig.ForceDirectDatabaseAccess = pConfig.ClientConfig.ForceDirectDatabaseAccess
ClientConfig.DocumentTypes = Doctypes ClientConfig.DocumentTypes = Doctypes
ClientConfig.ConnectionStringECM = _MSSQL_ECM.ConnectionString ClientConfig.ConnectionStringECM = _MSSQL_ECM.CurrentConnectionString
ClientConfig.ConnectionStringIDB = _MSSQL_IDB.ConnectionString ClientConfig.ConnectionStringIDB = _MSSQL_IDB.CurrentConnectionString
End Sub End Sub
Public Class ObjectStore Public Class ObjectStore

View File

@ -30,7 +30,7 @@ namespace ZUGFeRDRESTService
MSSQL = new MSSQLServer(LogConfig, AppConfig["MSSQLConnectionString"]); MSSQL = new MSSQLServer(LogConfig, AppConfig["MSSQLConnectionString"]);
Firebird = new Firebird(LogConfig, FBConfig["Datasource"], FBConfig["Database"], FBConfig["Username"], FBConfig["Password"]); Firebird = new Firebird(LogConfig, FBConfig["Datasource"], FBConfig["Database"], FBConfig["Username"], FBConfig["Password"]);
Logger.Debug("MSSQL Connection: [{0}]", MSSQL.ConnectionString); Logger.Debug("MSSQL Connection: [{0}]", MSSQL.CurrentConnectionString);
Logger.Debug("Firebird Connection: [{0}]", Firebird.ConnectionString); Logger.Debug("Firebird Connection: [{0}]", Firebird.ConnectionString);
} }