ToolCollection/ToolCollection/ClassNIDatenbankzugriff.vb
2025-06-06 13:25:50 +02:00

1078 lines
44 KiB
VB.net

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
''' <summary>
''' Start the timer.
''' </summary>
Shared Sub Timer_Start()
aTimerCount = 0
aTimer = New System.Timers.Timer(1000)
AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
aTimer.Enabled = True
End Sub
''' <summary>
''' Start the timer.
''' </summary>
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