Imports System.Data.SqlClient Imports System.Data.Odbc Imports System.Data.OleDb Imports Oracle.ManagedDataAccess.Client Imports System.Timers Imports System.Threading Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Database Imports System.IO Public Class ClassNIDatenbankzugriff Private Shared _Logger As DigitalData.Modules.Logging.Logger Private Shared _LastStep, _SQL As String Private Shared aTimerCount As Integer = 0 Private Shared aTimer As System.Timers.Timer Private Shared Oracle_Conn As New OracleConnection Private _firebird As Firebird Sub New(LogConf As DigitalData.Modules.Logging.LogConfig) _Logger = LogConf.GetLogger() If My.Settings.FB_DATASOURCE <> String.Empty Then _firebird = New Firebird(LogConf, My.Settings.FB_DATASOURCE, My.Settings.FB_DATABASE, My.Settings.FB_USER, My.Settings.FB_PW) End If 'Data Source=SDD-VMP04-SQL17\DD_DEVELOP01;Initial Catalog=DD_ECM_TEST;Persist Security Info=True;User ID=sa;Password=dd End Sub ''' ''' Start the timer. ''' Shared Sub Timer_Start() aTimerCount = 0 aTimer = New System.Timers.Timer(1000) AddHandler aTimer.Elapsed, AddressOf OnTimedEvent aTimer.Enabled = True End Sub ''' ''' Start the timer. ''' Shared Sub Timer_Stop() aTimer.Enabled = False aTimerCount = 0 End Sub ' Specify what you want to happen when the Elapsed event is ' raised. Private Shared Sub OnTimedEvent(source As Object, e As ElapsedEventArgs) aTimerCount = aTimerCount + 1 If aTimerCount > 60 Then _Logger.Warn("ClassNIDatenbankzugriff.OnTimedEvent-Die Maximaldauer (60sec) wurde überschritten!") _Logger.Warn("OracleConnection.StatementCacheSize: " & Oracle_Conn.StatementCacheSize) _Logger.Warn("Last Step: " & _LastStep) _Logger.Warn("OracleConnection.Connection State: " & Oracle_Conn.State.ToString) _Logger.Warn("OracleSQLCommand: " & _SQL) Oracle_Conn.Close() frmNIHauptseite.Abbruch_NI("Abbruch aufgrund Timeout Oracle", False, False) _Logger.Info("INDEXIERUNG WIRD NEUGESTARTET") 'und Neustart frmNIHauptseite.Profile_Durchlaufen() aTimer.Enabled = False 'Else ' If My.Settings.vLogErrorsonly = False Then ' _Logger.Debug("OracleConnection.StatementCacheSize: " & Oracle_Conn.StatementCacheSize) ' End If End If End Sub ' führt eine SQL-Anweisung auf der DB aus Public Function GetValueFromOracleDb(Profilname As String, ByVal selectAnweisung As String, ByVal host As String, ByVal servicename As String, ByVal User As String, ByVal pw As String, ByVal myDS As DataSet, Optional ByVal Indexname As String = "", Optional ByVal QuellVektor As Boolean = False) Dim swGvfO As New ClassStopwatch("GetValueFromOracleDb") _SQL = selectAnweisung 'MsgBox(selectAnweisung) _Logger.Debug("GetValueFromOracleDb: " & selectAnweisung) Try 'die nötigen Variablen definieren Dim result As Object = Nothing 'MsgBox("TestM: " & selectAnweisung) Dim conn As New OracleConnectionStringBuilder Dim connstr As String If host <> "" And servicename <> "" Then connstr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" & host & ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" & servicename & ")));User Id=" & User & ";Password=" & pw & ";" Else conn.DataSource = host conn.StatementCacheSize = 1 conn.UserID = User conn.Password = pw conn.PersistSecurityInfo = True conn.ConnectionTimeout = 120 connstr = conn.ConnectionString End If Oracle_Conn = New OracleConnection(connstr) Dim Oracle_Command As OracleCommand = Nothing Dim DataAdapter As OracleDataAdapter = Nothing Dim DataSet As DataSet = Nothing 'ConnectionString.DataSource = datasource 'ConnectionString. = User 'ConnectionString.Password = pw ' Verbindung zur Datenbank aufbauen Try _LastStep = "OracleCon wird geöffnet" Oracle_Conn.Open() _LastStep = "OracleCon.State: " & Oracle_Conn.State.ToString Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOracleDb(Oracle_Conn) Return Nothing End Try ' SQL-Abfrage definieren Try Oracle_Command = New OracleCommand(selectAnweisung, Oracle_Conn) 'OracleCommand(selectAnweisung, Connection) Oracle_Command.AddToStatementCache = True _LastStep = "ORACLE Command definiert" Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOracleDb(Oracle_Conn) Return Nothing End Try ' *** ÜBER EIN DATASET *** If Command() IsNot Nothing Then Try 'Datenadapter laden DataAdapter = New OracleDataAdapter(Oracle_Command) 'OracleDataAdapter(Command) ' DataSet erzeugen DataSet = New DataSet() ' DataSet mit Daten füllen Dim count As Integer = 0 _LastStep = "Ausführung ORACLE DataAdapter......" DataAdapter.Fill(DataSet) _LastStep = "ORACLE DataAdapter ausgeführt" 'Do While DataAdapter.Fill(DataSet) ' count += 1 ' If count > 2000 Then ' _Logger.Debug(">> ORACLE DataAdapter > 2000") ' _Logger.Debug(">> DataAdapter.Requery = " & DataAdapter.Requery.ToString) ' _Logger.Info(sw.Done()) ' Return Nothing ' End If 'Loop 'DataAdapter.Fill(DataSet) Oracle_Conn.Close() ' DB-Connection schliessen _LastStep = "DataSet wird durchlaufen" If DataSet.Tables(0).Rows.Count > 1 Or QuellVektor = True Then 'Beginne mit 0 Dim Index As Integer = 0 For Each Row As DataRow In DataSet.Tables(0).Rows Dim Row1 As DataRow Row1 = myDS.Tables("TBVEKTOR_ARRAY").NewRow() 'filling the row with values. Item property is used to set the field value. Row1.Item("IndexName") = Indexname Row1.Item("Value") = CStr(Row.Item(0)) myDS.Tables("TBVEKTOR_ARRAY").Rows.Add(Row1) ' ds.Tables("TBVEKTOR_ARRAYDataTable").Rows.Add(Temptable.Rows(0)) Index = Index + 1 Next _LastStep = "DataSet wurde durchlaufen" Dim msg = swGvfO.Done If msg <> "" Then _Logger.Debug($"SWResult: {msg}") Return Index Else If DataSet.Tables(0).Rows.Count = 1 Then _LastStep = "Rows.Count = 1" ' einen einzigen relevanten Wert zurückgeben (sollten keine mehrfachen Einträge auftauchen) _Logger.Debug("PLSQL-Ergebnis: '" & DataSet.Tables(0).Rows(0).Item(0) & "'") ' MsgBox("TestM: Wert: " & DataSet.Tables(0).Rows(0).Item(0).ToString) Dim msg = swGvfO.Done If msg <> "" Then _Logger.Debug($"SWResult: {msg}") Return DataSet.Tables(0).Rows(0).Item(0) Else _LastStep = "Rows.Count = 0" 'If My.Settings.vLogErrorsonly = False Then _Logger.Info("Dataadapter Rows count = 0") Dim msg = swGvfO.Done If msg <> "" Then _Logger.Debug($"SWResult: {msg}") Return Nothing End If End If Catch ex As Exception ' bei einem Fehler einen Eintrag in der Logdatei erzeugen _Logger.Error(ex) _Logger.Warn($"Unexpected error in GetValueFromOracleDB - Oracle-Command: {selectAnweisung}") ' DB-Connection schliessen Oracle_Conn.Close() Dim msg = swGvfO.Done If msg <> "" Then _Logger.Debug($"SWResult: {msg}") Return Nothing End Try Else ' kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte ' Eintrag in Logdatei machen _Logger.Warn("ClassNIDatenbankzugriff.GetValueFromOracleDb", "SQL-Anweisung ist ungültig. Command-Objekt konnte nicht erstellt werden. (SQL: " & selectAnweisung & ")") Dim msg = swGvfO.Done If msg <> "" Then _Logger.Debug($"SWResult: {msg}") Return Nothing End If Catch ex As Exception _Logger.Error(ex) _Logger.Warn($"Unexpected error in GetValueFromOracleDB: [{ex.Message}] -Oracle-Command: " & selectAnweisung) ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden Dim msg = swGvfO.Done If msg <> "" Then _Logger.Debug($"SWResult: {msg}") Return Nothing End Try End Function ' führt eine SQL-Anweisung auf der DB aus Public Function ExecuteonOracleDb(Profilname As String, ByVal plsqlcommand As String, ByVal host As String, ByVal servicename As String, ByVal User As String, ByVal pw As String) Try ' die nötigen Variablen definieren Dim result As Object = Nothing Dim conn As New OracleConnectionStringBuilder Dim connstr As String If host <> "" And servicename <> "" Then connstr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" & host & ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" & servicename & ")));User Id=" & User & ";Password=" & pw & ";" Else conn.DataSource = host conn.UserID = User conn.Password = pw conn.Pooling = True conn.StatementCacheSize = 1 conn.PersistSecurityInfo = True conn.ConnectionTimeout = 120 connstr = conn.ConnectionString End If Oracle_Conn = New OracleConnection(connstr) Dim Oracle_Command As OracleCommand = Nothing Dim DataAdapter As OracleDataAdapter = Nothing ' Verbindung zur Datenbank aufbauen Try Oracle_Conn.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOracleDb(Oracle_Conn) Return 0 End Try ' SQL-Abfrage definieren Try Oracle_Command = New OracleCommand(plsqlcommand, Oracle_Conn) Oracle_Command.AddToStatementCache = True _Logger.Debug(">> Oracle-Command: " & plsqlcommand) Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOracleDb(Oracle_Conn) Return 0 End Try ' *** Ausführen des Command *** If Command() IsNot Nothing Then Try Oracle_Command.ExecuteNonQuery() ' DB-Connection schliessen Me.CloseOracleDb(Oracle_Conn) Return 1 Catch ex As Exception ' bei einem Fehler einen Eintrag in der Logdatei erzeugen _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOracleDb(Oracle_Conn) Return 0 End Try Else ' kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte ' Eintrag in Logdatei machen _Logger.Warn("ClassNIDatenbankzugriff.ExecuteonOracleDb", "SQL-Command ist ungültig bzw konnte nicht erstellt werden (SQL: " & plsqlcommand & ")") Timer_Stop() Return 0 End If Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Timer_Stop() Return 0 End Try End Function Public Function ExecuteonOracleClient(Profilname As String, ByVal plsqlcommand As String, ByVal host As String, ByVal servicename As String, ByVal User As String, ByVal pw As String) Try ' die nötigen Variablen definieren Dim result As Object = Nothing Dim conn As New OracleConnectionStringBuilder Dim connstr As String If host <> "" And servicename <> "" Then connstr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" & host & ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" & servicename & ")));User Id=" & User & ";Password=" & pw & ";" Else conn.DataSource = host conn.UserID = User conn.StatementCacheSize = 1 conn.Password = pw conn.PersistSecurityInfo = True conn.ConnectionTimeout = 120 connstr = conn.ConnectionString End If Oracle_Conn = New OracleConnection(conn.ConnectionString) Dim Oracle_Command As OracleCommand = Nothing Dim DataAdapter As OracleDataAdapter = Nothing ' Verbindung zur Datenbank aufbauen Try Oracle_Conn.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Oracle_Conn.Close() Timer_Stop() Return 0 End Try ' SQL-Abfrage definieren Try Oracle_Command = New OracleCommand(plsqlcommand, Oracle_Conn) Oracle_Command.AddToStatementCache = True _Logger.Debug(">> Oracle-Command: " & plsqlcommand) Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Oracle_Conn.Close() Timer_Stop() Return 0 End Try ' *** Ausführen des Command *** If Command() IsNot Nothing Then Try Oracle_Command.ExecuteNonQuery() 'Dim count = 1 'Do While Oracle_Command.ExecuteNonQuery() ' count += 1 ' If count > 2000 Then ' _Logger.Debug(">> Oracle_Command.ExecuteNonQuery > 2000") ' Oracle_Conn.Close() ' Timer_Stop() ' Return 0 ' End If 'Loop ' DB-Connection schliessen Oracle_Conn.Close() Timer_Stop() Return 1 Catch ex As Exception ' bei einem Fehler einen Eintrag in der Logdatei erzeugen _Logger.Error(ex) ' DB-Connection schliessen Oracle_Conn.Close() Timer_Stop() Return 0 End Try Else ' kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte ' Eintrag in Logdatei machen _Logger.Warn("ClassNIDatenbankzugriff.ExecuteonOracleClient", "SQL-Command ist ungültig bzw konnte nicht erstellt werden (SQL: " & plsqlcommand & ")") Timer_Stop() Return 0 End If Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Timer_Stop() Return 0 End Try End Function ' Überprüft den Indexwert und gibt 0 oder mehr zurück Public Function CheckIndex_oracle(ByVal _scalar_select As String, ByVal host As String, ByVal servicename As String, ByVal User As String, ByVal pw As String) Try Dim conn As New OracleConnectionStringBuilder Dim connstr As String If host <> "" And servicename <> "" Then connstr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" & host & ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" & servicename & ")));User Id=" & User & ";Password=" & pw & ";" Else conn.DataSource = host conn.UserID = User conn.Password = pw conn.PersistSecurityInfo = True conn.ConnectionTimeout = 120 connstr = conn.ConnectionString End If Dim Oracle_Connection As New OracleConnection(connstr) Try Oracle_Connection.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Return 99 Oracle_Connection.Close() End Try Dim Command As OracleCommand ' Verbindung zur Datenbank aufbauen ' SQL-Abfrage definieren Command = New OracleCommand(_scalar_select, Oracle_Connection) Dim ergebnis As String = Command.ExecuteScalar.ToString Return CLng(ergebnis) Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Return 0 End Try End Function Public Function CheckIndex_mssql(Profilname As String, ByVal scalarselect As String, ByVal datasource As String, ByVal User As String, ByVal pw As String, ByVal myDS As DataSet, ByVal init_Cata As String) Try Dim Connection As SqlConnection = Nothing Dim Command As SqlCommand = Nothing Dim DataAdapter As SqlDataAdapter = Nothing Dim DataSetSQL As DataSet = Nothing Dim con As String ' ConnectionString aufbauen If User = "WINAUTH" Then con = "Data Source=" & datasource & ";Initial Catalog=" & init_Cata & ";Trusted_Connection=True;" Else con = "Server=" & datasource & ";Database=" & init_Cata & ";User Id=" & User & ";Password=" & pw & ";" End If ' Verbindung zur Datenbank aufbauen Try Connection = New SqlConnection(con) Connection.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return Nothing End Try ' SQL-Abfrage definieren Command.CommandText = scalarselect Command.Connection = Connection Dim ergebnis As String = Command.ExecuteScalar.ToString Return CLng(ergebnis) Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Return 0 End Try End Function Private Sub CloseOracleDb(ByRef Connection As OracleConnection) 'OracleConnection) Timer_Stop() ' wenn eine Datenbank-Connection aufgebaut ist If Connection IsNot Nothing Then ' diese schliessen Connection.Close() Connection = Nothing End If End Sub Private Sub CloseMssqlDb(ByRef Connection As SqlConnection) ' wenn eine Datenbank-Connection aufgebaut ist If Connection IsNot Nothing Then ' diese schliessen Connection.Close() Connection = Nothing End If End Sub ' führt eine SQL-Anweisung auf der DB aus Public Function GetValueFromMssqlDb(WMFilename As String, Profilname As String, ByVal selectAnweisung As String, ByVal datasource As String, ByVal User As String, ByVal pw As String, ByVal myDS As DataSet, ByVal init_Cata As String, Optional ByVal Indexname As String = "", Optional ByVal QuellVektor As Boolean = False) ' Try _Logger.Debug("MS-SQL: " & selectAnweisung) ' die nötigen Variablen definieren '#### Dim con As String ' ConnectionString aufbauen If User = "WINAUTH" Then con = "Data Source=" & datasource & ";Initial Catalog=" & init_Cata & ";Trusted_Connection=True;" Else con = "Server=" & datasource & ";Database=" & init_Cata & ";User Id=" & User & ";Password=" & pw & ";" End If Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand SQLconnect.ConnectionString = con Try SQLconnect.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Return Nothing End Try ' SQL-Abfrage definieren Try SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = selectAnweisung SQLcommand.CommandTimeout = 120 Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen SQLconnect.Close() Return Nothing End Try 'Den Datenadapter laden und die Datatable zurückgeben Try If Not IsNothing(SQLcommand) Then Dim adapter1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(SQLcommand) Dim dt As DataTable = New DataTable() adapter1.Fill(dt) If Not IsNothing(dt) Then Try Select Case dt.Rows.Count Case 0 _Logger.Debug($"{WMFilename} # SQL liefert keine Zeile zurück: [{selectAnweisung}]") If QuellVektor = True Then SQLconnect.Close() Return "Empty Row" Else SQLconnect.Close() Return "" End If Case 1 ' einen einzigen relevanten Wert zurückgeben Dim sqlresult = dt.Rows(0).Item(0) If IsDBNull(sqlresult) Then _Logger.Debug($"{WMFilename} # Genau 1 Zeile allerdings System.DBNull - [{selectAnweisung}]") If QuellVektor = True Then SQLconnect.Close() Return "NULL Row" Else SQLconnect.Close() Return "" End If Else _Logger.Debug($"{WMFilename} # Genau 1 Zeile - SQL-Ergebnis: '" & sqlresult.ToString & "'") Dim newRow As DataRow If QuellVektor = True Then newRow = myDS.Tables("TBVEKTOR_ARRAY").NewRow() 'filling the row with values. Item property is used to set the field value. newRow.Item("IndexName") = Indexname newRow.Item("Value") = CStr(sqlresult) _Logger.Debug("Value: " & CStr(sqlresult)) myDS.Tables("TBVEKTOR_ARRAY").Rows.Add(newRow) Else newRow = myDS.Tables("TBVEKTOR_ARRAY").NewRow() 'filling the row with values. Item property is used to set the field value. newRow.Item("IndexName") = Indexname newRow.Item("Value") = sqlresult.ToString myDS.Tables("TBVEKTOR_ARRAY").Rows.Add(newRow) End If If sqlresult Is Nothing Then SQLconnect.Close() Return 1 Else SQLconnect.Close() Return sqlresult End If End If Case Else 'SQL liefert mehrere Werte zurück _Logger.Debug($"{WMFilename} # Mehrere Zeilen durch SQL - Anzahl: " & dt.Rows.Count) 'Beginne mit 0 Dim counter As Integer = 0 For Each Row As DataRow In dt.Rows Dim newRow As DataRow newRow = myDS.Tables("TBVEKTOR_ARRAY").NewRow() 'filling the row with values. Item property is used to set the field value. newRow.Item("IndexName") = Indexname newRow.Item("Value") = CStr(Row.Item(0)) _Logger.Debug("Value: " & CStr(Row.Item(0))) myDS.Tables("TBVEKTOR_ARRAY").Rows.Add(newRow) ' ds.Tables("TBVEKTOR_ARRAYDataTable").Rows.Add(Temptable.Rows(0)) counter += 1 Next SQLconnect.Close() Return counter End Select SQLconnect.Close() Catch ex As Exception _Logger.Warn("ClassNIDatenbankzugriff.GetValueFromMssqlDb" & ex.Message) ' DB-Connection schliessen SQLconnect.Close() Return Nothing End Try Else 'Eintrag in Logdatei machen _Logger.Warn("Die Datatable ist unerwartet nothing. (SQL: " & selectAnweisung & ")") SQLconnect.Close() Return Nothing End If Else 'kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte 'Eintrag in Logdatei machen _Logger.Warn("SQL-Anweisung ist ungültig. Command-Objekt konnte nicht erstellt werden. (SQL: " & selectAnweisung & ")") SQLconnect.Close() Return Nothing End If Catch ex As Exception ' bei einem Fehler einen Eintrag in der Logdatei erzeugen _Logger.Error(ex) _Logger.Warn($"SQL-Command [{selectAnweisung}]") ' DB-Connection schliessen SQLconnect.Close() Return Nothing End Try SQLconnect.Close() '##### Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Return Nothing End Try End Function Public Function GetValueFromFirebird(Profilname As String, ByVal selectAnweisung As String, ByVal Indexname As String, myDS As DataSet) ' Try _Logger.Debug("Firebird: " & selectAnweisung) Dim result = _firebird.GetScalarValue(selectAnweisung) Dim newRow As DataRow newRow = myDS.Tables("TBVEKTOR_ARRAY").NewRow() 'filling the row with values. Item property is used to set the field value. newRow.Item("IndexName") = Indexname newRow.Item("Value") = CStr(result) _Logger.Debug("Value: " & CStr(result)) myDS.Tables("TBVEKTOR_ARRAY").Rows.Add(newRow) Return result '##### Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) _Logger.Warn("selectAnweisung: " & selectAnweisung) Return Nothing End Try End Function ' führt eine SQL-Anweisung auf der DB aus Public Function ExecuteonMSSQL(Profilname As String, ByVal sqlcommand As String, ByVal datasource As String, ByVal User As String, ByVal pw As String, ByVal init_Cata As String) Try _Logger.Debug("MSSQL-Command: " & sqlcommand) ' die nötigen Variablen definieren Dim Connection As SqlConnection = Nothing ' Dim ConnectionString As SqlConnectionStringBuilder = Nothing Dim oSQLCommand As SqlCommand = Nothing Dim DataAdapter As SqlDataAdapter = Nothing '' ConnectionString aufbauen (aus Settings auslesen) 'ConnectionString = New SqlConnectionStringBuilder() 'ConnectionString.DataSource = datasource 'ConnectionString.UserID = User 'ConnectionString.Password = pw 'ConnectionString.InitialCatalog = init_Cata Dim con As String ' ConnectionString aufbauen If User = "WINAUTH" Then con = "Data Source=" & datasource & ";Initial Catalog=" & init_Cata & ";Trusted_Connection=True;" Else con = "Server=" & datasource & ";Database=" & init_Cata & ";User Id=" & User & ";Password=" & pw & ";" End If ' Verbindung zur Datenbank aufbauen Try Connection = New SqlConnection(con) Connection.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return 0 End Try ' SQL-Abfrage definieren Try oSQLCommand = New SqlCommand(sqlcommand, Connection) Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return 0 End Try ' *** Ausführen des Command *** If oSQLCommand IsNot Nothing Then Try oSQLCommand.ExecuteNonQuery() ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return 1 Catch ex As Exception ' bei einem Fehler einen Eintrag in der Logdatei erzeugen _Logger.Error(ex) ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return 0 End Try Else ' kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte ' Eintrag in Logdatei machen _Logger.Warn("Unexpected error in Execute on MSSQL Row 774") Return 0 End If Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Return 0 End Try End Function Public Function CheckIndex_MSSSQL(Profilname As String, ByVal scalar_select As String, ByVal datasource As String, ByVal User As String, ByVal pw As String, ByVal init_Cata As String) Try _Logger.Debug("MSSQL-Command: " & scalar_select) ' die nötigen Variablen definieren Dim Connection As SqlConnection = Nothing Dim Command As SqlCommand = Nothing Dim con As String ' ConnectionString aufbauen If User = "WINAUTH" Then con = "Data Source=" & datasource & ";Initial Catalog=" & init_Cata & ";Trusted_Connection=True;" Else con = "Server=" & datasource & ";Database=" & init_Cata & ";User Id=" & User & ";Password=" & pw & ";" End If ' Verbindung zur Datenbank aufbauen Try Connection = New SqlConnection(con) Connection.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return Nothing End Try ' SQL-Abfrage definieren Try Command = New SqlCommand(scalar_select, Connection) Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return Nothing End Try Dim ergebnis = Command.ExecuteScalar Return CLng(ergebnis) Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Return 0 End Try End Function Public Function CheckIndex_ODBC(Profilname As String, ByVal scalar_select As String, ByVal datasource As String, ByVal User As String, ByVal pw As String) Try _Logger.Debug("SQL-Command: " & scalar_select) ' die nötigen Variablen definieren Dim Connection As OdbcConnection = Nothing Dim Command As OdbcCommand = Nothing Dim con As String ' ConnectionString aufbauen con = $"DSN={datasource};UID={User};Pwd={pw};" ' Verbindung zur Datenbank aufbauen Try Connection = New OdbcConnection(con) Connection.Open() Catch ex As Exception _Logger.Error(ex) Connection.Close() Return Nothing End Try ' SQL-Abfrage definieren Try Command = New OdbcCommand(scalar_select, Connection) Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Connection.Close() Return Nothing End Try Dim ergebnis = Command.ExecuteScalar Return CLng(ergebnis) Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Return 0 End Try End Function Public Sub CloseOdbcDb(ByRef Connection As OdbcConnection) ' wenn eine Datenbank-Connection aufgebaut ist If Connection IsNot Nothing Then ' diese schliessen Connection.Close() Connection = Nothing End If End Sub ' führt eine SQL-Anweisung auf der DB aus Public Function GetValueFromOdbcDb(Profilname As String, ByVal selectAnweisung As String, ByVal datasource As String, ByVal User As String, ByVal pw As String, Optional ByVal Indexname As String = "") ' Try _Logger.Debug("ODBC: " & selectAnweisung) ' die nötigen Variablen definieren Dim result As Object = Nothing Dim Connection As OdbcConnection = Nothing Dim ConnectionString As OdbcConnectionStringBuilder = Nothing Dim Command As OdbcCommand = Nothing Dim DataAdapter As OdbcDataAdapter = Nothing Dim DataSet As DataSet = Nothing ' ConnectionString aufbauen (aus Settings auslesen) ConnectionString = New OdbcConnectionStringBuilder() ConnectionString.ConnectionString = "Dsn=" & datasource & ";Uid=" & User & ";Pwd=" & pw ' Verbindung zur Datenbank aufbauen Try Connection = New OdbcConnection(ConnectionString.ConnectionString) Connection.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOdbcDb(Connection) Return Nothing End Try ' SQL-Abfrage definieren Try Command = New OdbcCommand(selectAnweisung, Connection) Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOdbcDb(Connection) Return Nothing End Try ' *** ÜBER EINEN DATAREADER *** 'Dim DataReader As OracleDataReader = Command.ExecuteReader() 'Do While DataReader.Read ' For c As Integer = 0 To DataReader.FieldCount - 1 ' result = DataReader.GetValue(c) ' Return result ' Next 'Loop ' *** ÜBER EIN DATASET *** If Command IsNot Nothing Then Try ' Datenadapter laden DataAdapter = New OdbcDataAdapter(Command) ' DataSet erzeugen DataSet = New DataSet() ' DataSet mit Daten füllen DataAdapter.Fill(DataSet) ' DB-Connection schliessen Me.CloseOdbcDb(Connection) ' einen einzigen relevanten Wert zurückgeben (sollten keine mehrfachen Einträge auftauchen) Return DataSet.Tables(0).Rows(0).Item(0) Catch ex As Exception ' bei einem Fehler einen Eintrag in der Logdatei erzeugen _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOdbcDb(Connection) Return Nothing End Try Else ' kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte ' Eintrag in Logdatei machen _Logger.Warn("Unexpected Error in GetValueFromODBC Row 3937") Return Nothing End If Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden _Logger.Error(ex) Return Nothing End Try End Function Private Sub CloseOleDb(ByRef Connection As OleDbConnection) ' wenn eine Datenbank-Connection aufgebaut ist If Connection IsNot Nothing Then ' diese schliessen Connection.Close() Connection = Nothing End If End Sub ' führt eine SQL-Anweisung auf der DB aus Public Function GetValueFromOleDb(Profilname As String, ByVal selectAnweisung As String, ByVal datasource As String, ByVal User As String, ByVal pw As String, Optional ByVal Indexname As String = "") ' _Logger.Debug("OLEDB: " & selectAnweisung) 'MsgBox(selectAnweisung) Try ' die nötigen Variablen definieren Dim result As Object = Nothing Dim Connection As OleDbConnection = Nothing Dim ConnectionString As OleDbConnectionStringBuilder = New System.Data.OleDb.OleDbConnectionStringBuilder Dim Command As OleDbCommand = Nothing Dim DataAdapter As OleDbDataAdapter = Nothing Dim DataSet As DataSet = Nothing 'Console.WriteLine(selectAnweisung) ' ConnectionString aufbauen (aus Settings auslesen) ConnectionString("Provider") = "Microsoft.Jet.OLEDB.4.0" ConnectionString("Data Source") = datasource ConnectionString("User Id") = User ConnectionString("Password") = pw 'ConnectionString = New OleDbConnectionStringBuilder() 'ConnectionString.ConnectionString = "Dsn=" & datasource & ";Uid=" & User & ";Pwd=" & pw 'ConnectionString.DataSource = datasource 'ConnectionString.Provider = ' Verbindung zur Datenbank aufbauen Try Connection = New OleDbConnection(ConnectionString.ConnectionString) Connection.Open() Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOleDb(Connection) Return Nothing End Try ' SQL-Abfrage definieren Try Command = New OleDbCommand(selectAnweisung, Connection) Catch ex As Exception _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOleDb(Connection) Return Nothing End Try ' *** ÜBER EINEN DATAREADER *** 'Dim DataReader As OracleDataReader = Command.ExecuteReader() 'Do While DataReader.Read ' For c As Integer = 0 To DataReader.FieldCount - 1 ' result = DataReader.GetValue(c) ' Return result ' Next 'Loop ' *** ÜBER EIN DATASET *** If Command IsNot Nothing Then Try ' Datenadapter laden DataAdapter = New OleDbDataAdapter(Command) ' DataSet erzeugen DataSet = New DataSet() ' DataSet mit Daten füllen DataAdapter.Fill(DataSet) ' DB-Connection schliessen Me.CloseOleDb(Connection) ' Console.WriteLine(DataSet.Tables(0).Rows(0).Item(0)) ' einen einzigen relevanten Wert zurückgeben (sollten keine mehrfachen Einträge auftauchen) Return DataSet.Tables(0).Rows(0).Item(0) Catch ex As Exception ' bei einem Fehler einen Eintrag in der Logdatei erzeugen _Logger.Error(ex) ' DB-Connection schliessen Me.CloseOleDb(Connection) Return Nothing End Try Else ' kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte ' Eintrag in Logdatei machen _Logger.Warn("Unexpected Error in GetValueFromODBC Row 1057") Return Nothing End If Catch ex As Exception _Logger.Error(ex) Return Nothing End Try End Function End Class