1078 lines
44 KiB
VB.net
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
|
|
|