655 lines
26 KiB
VB.net
655 lines
26 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 _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
|
|
Shared Sub Timer_Stop()
|
|
aTimer.Enabled = False
|
|
aTimerCount = 0
|
|
End Sub
|
|
|
|
|
|
' Überprüft den Indexwert und gibt 0 oder mehr zurück
|
|
|
|
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 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
|
|
|