Imports Oracle.ManagedDataAccess.Client Imports System.Data.Odbc Imports System.Data.SqlClient Public Class ClassDatabase Private Shared connectionString As String Public Shared Function Init() Try connectionString = MyConnectionString Dim SQLconnect As New SqlClient.SqlConnection SQLconnect.ConnectionString = connectionString SQLconnect.Open() SQLconnect.Close() Return True Catch ex As Exception ClassLogger.Add("Error in DatabaseInit: " & ex.Message, True) Return False End Try End Function Public Shared Function GetConnectionString(id As Integer) Dim connectionString As String = "" Try 'Me.TBCONNECTIONTableAdapter.FillByID(Me.DD_DMSLiteDataSet.TBCONNECTION, id) Dim DTConnection As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBDD_CONNECTION WHERE GUID = " & id, True) If DTConnection.Rows.Count = 1 Then Select Case DTConnection.Rows(0).Item("SQL_PROVIDER") Case "MS-SQL" If DTConnection.Rows(0).Item("USERNAME") = "WINAUTH" Then connectionString = "Server=" & DTConnection.Rows(0).Item("SERVER") & ";Database=" & DTConnection.Rows(0).Item("DATENBANK") & ";Trusted_Connection=True;" Else connectionString = "Server=" & DTConnection.Rows(0).Item("SERVER") & ";Database=" & DTConnection.Rows(0).Item("DATENBANK") & ";User Id=" & DTConnection.Rows(0).Item("USERNAME") & ";Password=" & DTConnection.Rows(0).Item("USERNAME") & ";Password=" & DTConnection.Rows(0).Item("PASSWORD") & ";" End If ' connectionString = "Server=" & DTConnection.Rows(0).Item("SERVER") & ";Database=" & DTConnection.Rows(0).Item("DATENBANK") & ";User Id=" & DTConnection.Rows(0).Item("USERNAME") & ";Password=" & DTConnection.Rows(0).Item("PASSWORD") & ";" Case "MS-SQLServer" If DTConnection.Rows(0).Item("USERNAME") = "WINAUTH" Then connectionString = "Server=" & DTConnection.Rows(0).Item("SERVER") & ";Database=" & DTConnection.Rows(0).Item("DATENBANK") & ";Trusted_Connection=True;" Else connectionString = "Server=" & DTConnection.Rows(0).Item("SERVER") & ";Database=" & DTConnection.Rows(0).Item("DATENBANK") & ";User Id=" & DTConnection.Rows(0).Item("USERNAME") & ";Password=" & DTConnection.Rows(0).Item("USERNAME") & ";Password=" & DTConnection.Rows(0).Item("PASSWORD") & ";" End If Case "Oracle" If DTConnection.Rows(0).Item("BEMERKUNG").ToString.Contains("without tnsnames") Then connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" & DTConnection.Rows(0).Item("SERVER") & ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" & DTConnection.Rows(0).Item("DATENBANK") & ")));User Id=" & DTConnection.Rows(0).Item("USERNAME") & ";Password=" & DTConnection.Rows(0).Item("PASSWORD") & ";" Else connectionString = "Data Source=" & DTConnection.Rows(0).Item("SERVER") & ";Persist Security Info=True;User Id=" & DTConnection.Rows(0).Item("USERNAME") & ";Password=" & DTConnection.Rows(0).Item("PASSWORD") & ";Unicode=True" End If Case "ODBC" Dim conn As New OdbcConnection("dsn=" & DTConnection.Rows(0).Item("SERVER") & ";uid=" & DTConnection.Rows(0).Item("USERNAME") & ";pwd=" + DTConnection.Rows(0).Item("PASSWORD")) connectionString = conn.ConnectionString Case Else ClassLogger.Add(" - ConnectionType nicht integriert", False) MsgBox("ConnectionType nicht integriert", MsgBoxStyle.Critical, "Bitte Konfiguration Connection überprüfen!") End Select Else ClassLogger.Add(" No entry for Connection-ID: " & id.ToString, True) End If Catch ex As Exception ClassLogger.Add(" - Error in bei GetConnectionString - Fehler: " & vbNewLine & ex.Message) MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in GetConnectionString:") End Try Return connectionString End Function Public Shared Function Return_Datatable(Select_anweisung As String, Optional USE_PROXY As Boolean = False) Try Dim sw As New SW("Return_Datatable: " & Select_anweisung) Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand If USE_PROXY = True And DD_LIB_Standards.clsDatabase.DB_PROXY_INITIALIZED Then SQLconnect.ConnectionString = ClassProxy.MyPROXYConnectionString Else SQLconnect.ConnectionString = connectionString End If If USE_PROXY = False Then Console.WriteLine(Select_anweisung) End If SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = Select_anweisung SQLcommand.CommandTimeout = 180 Dim adapter1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(SQLcommand) Dim dt As DataTable = New DataTable() adapter1.Fill(dt) SQLconnect.Close() sw.Done() Return dt Catch ex As Exception MsgBox("Error in Return_Datatable: " & ex.Message & vbNewLine & vbNewLine & Select_anweisung, MsgBoxStyle.Critical) ClassHelper.InsertEssential_Log(CURRENT_RECORD_ID, "RECORD-ID", ex.Message & " - SQL: " & Select_anweisung) ClassLogger.Add("Error in Return_Datatable: " & ex.Message, True) ClassLogger.Add(">> SQL: " & Select_anweisung, False) If (ex.Message.Contains("Ungültiger Objektname") Or ex.Message.Contains("Invalid Object Name")) And DD_LIB_Standards.clsDatabase.DB_PROXY_INITIALIZED Then MsgBox("A database-object could not be found but synchronization of Proxyserver might be in action! So please try again in a few seconds/minutes!", MsgBoxStyle.Exclamation) End If Return Nothing End Try End Function Public Shared Function MSSQL_ReturnDTWithConnection(connectionId As Integer, sql As String) Try Dim regex As New System.Text.RegularExpressions.Regex("(@(\d+)@)") Dim match As System.Text.RegularExpressions.Match = regex.Match(sql) If match.Success Then 'Return Nothing End If Dim connectionString As String connectionString = ClassDatabase.GetConnectionString(connectionId) If connectionString <> "" Then Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand SQLconnect.ConnectionString = connectionString SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = sql Dim adapter1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(SQLcommand) Dim dt As DataTable = New DataTable() adapter1.Fill(dt) SQLconnect.Close() Return dt Else MsgBox("No Connection received for ID: " & connectionId.ToString, MsgBoxStyle.Exclamation) Return Nothing End If Catch ex As Exception ClassLogger.Add("Unexpected Error in MSSQL_ReturnDTWithConnection: " & vbNewLine & ex.Message & vbNewLine & vbNewLine & sql) MsgBox("Unexpected Error in MSSQL_ReturnDTWithConnection:" & vbNewLine & ex.Message & vbNewLine & vbNewLine & sql, MsgBoxStyle.Critical) Return Nothing End Try End Function Public Shared Function Return_Datatable_CS(Select_anweisung As String, ConString As String, Optional userInput As Boolean = False) Try Dim sw As New SW("Return_Datatable_CS: " & Select_anweisung) Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand SQLconnect.ConnectionString = ConString SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = Select_anweisung Dim adapter1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(SQLcommand) Dim dt As DataTable = New DataTable() adapter1.Fill(dt) SQLconnect.Close() sw.Done() Return dt Catch ex As Exception If userInput = True Then MsgBox("Error in Return_Datatable_CS - Error-Message:" & vbNewLine & ex.Message & vbNewLine & "SQL-Command:" & vbNewLine & Select_anweisung, MsgBoxStyle.Critical) End If ClassLogger.Add("Error in Return_Datatable_CS: " & ex.Message, True) ClassLogger.Add("#SQL: " & Select_anweisung, False) Return Nothing End Try End Function Public Shared Function Return_Datatable_Connection(Select_anweisung As String, connectionId As Integer, Optional userInput As Boolean = False) Try Dim sw As New SW("Return_Datatable_Connection: " & Select_anweisung) Dim connectionString As String connectionString = ClassDatabase.GetConnectionString(connectionId) If connectionString <> "" Then Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand SQLconnect.ConnectionString = connectionString SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = Select_anweisung Dim adapter1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(SQLcommand) Dim dt As DataTable = New DataTable() adapter1.Fill(dt) SQLconnect.Close() sw.Done() Return dt Else Return Nothing End If Catch ex As Exception If userInput = True Then MsgBox("Error in Return_Datatable_Connection - Error-Message:" & vbNewLine & ex.Message & vbNewLine & "SQL-Command:" & vbNewLine & Select_anweisung, MsgBoxStyle.Critical) End If ClassLogger.Add("Error in Return_Datatable_Connection: " & ex.Message) ClassLogger.Add("#SQL: " & Select_anweisung) Return Nothing End Try End Function Public Shared Function Execute_non_Query(ExecuteCMD As String, Optional USE_PROXY As Boolean = False) Try Dim sw As New SW("Execute_non_Query: " & ExecuteCMD) Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand If USE_PROXY = True And DD_LIB_Standards.clsDatabase.DB_PROXY_INITIALIZED Then SQLconnect.ConnectionString = ClassProxy.MyPROXYConnectionString Else SQLconnect.ConnectionString = connectionString End If SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo SQLcommand.CommandText = ExecuteCMD SQLcommand.CommandTimeout = 120 SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() SQLconnect.Close() sw.Done() Return True Catch ex As Exception 'If Userinput = True Then ' MsgBox("Error in Execute_non_Query: " & ex.Message & vbNewLine & vbNewLine & ExecuteCMD, MsgBoxStyle.Critical) 'End If ClassLogger.Add("Error in Execute_non_Query: " & ex.Message) ClassLogger.Add("SQL: " & ExecuteCMD) Return False End Try End Function Public Shared Function Execute_non_Query_withConn(ExecuteCMD As String, ConnID As Integer) Try Dim sw As New SW("Execute_non_Query_withConn: " & ExecuteCMD) Dim connectionString As String connectionString = ClassDatabase.GetConnectionString(ConnID) If connectionString <> "" Then Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand SQLconnect.ConnectionString = connectionString SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo SQLcommand.CommandText = ExecuteCMD SQLcommand.CommandTimeout = 120 SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() SQLconnect.Close() sw.Done() Return True Else MsgBox("No ConnectionID for Conn-ID: " & ConnID.ToString, MsgBoxStyle.Exclamation) Return Nothing End If Catch ex As Exception ClassLogger.Add("Error in Execute_non_Query_withConn: " & ex.Message, True) ClassLogger.Add("SQL: " & ExecuteCMD, False) Return False End Try End Function Public Shared Function Execute_non_Query_withConnString(ExecuteCMD As String, theconnstring As String) Try Dim sw As New SW("Execute_non_Query_withConnString: " & ExecuteCMD) Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand SQLconnect.ConnectionString = theconnstring SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo SQLcommand.CommandText = ExecuteCMD SQLcommand.CommandTimeout = 120 SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() SQLconnect.Close() sw.Done() Return True Catch ex As Exception ClassLogger.Add("Error in Execute_non_Query_withConnString: " & ex.Message, True) ClassLogger.Add("SQL: " & ExecuteCMD, False) Return False End Try End Function 'TODO: Asynchrone Abfrage möglich machen Public Shared Sub Execute_non_Query_Async(ExecuteCMD As String, Optional Userinput As Boolean = False) Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand Dim callback As New AsyncCallback(AddressOf Execute_non_Query_Async_Callback) Try SQLconnect.ConnectionString = connectionString SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand() 'Update Last Created Record in Foo SQLcommand.CommandText = ExecuteCMD SQLcommand.CommandTimeout = 120 SQLcommand.BeginExecuteNonQuery(callback, SQLcommand) Catch ex As Exception If Userinput = True Then MsgBox("Error in Execute_non_Query_Async: " & ex.Message & vbNewLine & vbNewLine & ExecuteCMD, MsgBoxStyle.Critical) End If ClassLogger.Add("Error in Execute_non_Query_Async: " & ex.Message, True) ClassLogger.Add("SQL: " & ExecuteCMD, False) Finally SQLcommand.Dispose() SQLconnect.Close() End Try End Sub Private Shared Sub Execute_non_Query_Async_Callback(ByVal result As IAsyncResult) Dim command As SqlClient.SqlCommand = CType(result.AsyncState, SqlClient.SqlCommand) Dim res = command.EndExecuteNonQuery(result) ClassLogger.Add(String.Format("Finished executing Async database operation: {0}", command.CommandText), False) End Sub Public Shared Function Execute_Scalar(cmdscalar As String, Optional USE_PROXY As Boolean = False) Dim result Try Dim sw As New SW("Execute_Scalar: " & cmdscalar) Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand If USE_PROXY = True And DD_LIB_Standards.clsDatabase.DB_PROXY_INITIALIZED Then SQLconnect.ConnectionString = ClassProxy.MyPROXYConnectionString Else SQLconnect.ConnectionString = connectionString End If If USE_PROXY = False Then Console.WriteLine(cmdscalar) End If SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo SQLcommand.CommandText = cmdscalar SQLcommand.CommandTimeout = 120 result = SQLcommand.ExecuteScalar() SQLcommand.Dispose() SQLconnect.Close() sw.Done() Return result Catch ex As Exception 'If Userinput = True Then ' MsgBox("Error in Execute_Scalar: " & ex.Message & vbNewLine & vbNewLine & cmdscalar, MsgBoxStyle.Critical) 'End If ClassLogger.Add("Error in Execute_Scalar: " & ex.Message, True) ClassLogger.Add("SQL: " & cmdscalar, False) Return Nothing End Try End Function Public Shared Function Execute_ScalarWithConnection(connectionId As Integer, cmdscalar As String) Dim result Try Dim connectionString As String connectionString = ClassDatabase.GetConnectionString(connectionId) If connectionString <> "" Then Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand SQLconnect.ConnectionString = connectionString SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo SQLcommand.CommandText = cmdscalar SQLcommand.CommandTimeout = 120 result = SQLcommand.ExecuteScalar() SQLcommand.Dispose() SQLconnect.Close() Return result Else MsgBox("No Connection for ID: " & connectionId & " - ExecuteScalar: " & cmdscalar, MsgBoxStyle.Exclamation) ClassLogger.Add("No Connection for ID: " & connectionId & " - ExecuteScalar: " & cmdscalar) Return Nothing End If Catch ex As Exception ClassLogger.Add("Error in Execute_ScalarWithConnection: " & ex.Message, True) ClassLogger.Add("SQL: " & cmdscalar, False) Return Nothing End Try End Function Public Shared Function Execute_ScalarWithConnectionString(connectionString As String, cmdscalar As String) Dim result Try Dim SQLconnect As New SqlClient.SqlConnection Dim SQLcommand As SqlClient.SqlCommand SQLconnect.ConnectionString = connectionString SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo SQLcommand.CommandText = cmdscalar SQLcommand.CommandTimeout = 120 result = SQLcommand.ExecuteScalar() SQLcommand.Dispose() SQLconnect.Close() Return result Catch ex As Exception ClassLogger.Add("Error in Execute_ScalarWithConnectionString: " & ex.Message, True) ClassLogger.Add("SQL: " & cmdscalar, False) Return Nothing End Try End Function Public Shared Function OracleExecute_Scalar(cmdscalar As String, OracleConnection As String) Dim result Try Dim SQLconnect As New OracleConnection Dim SQLcommand As New OracleCommand SQLconnect.ConnectionString = OracleConnection SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo SQLcommand.CommandText = cmdscalar result = SQLcommand.ExecuteScalar() SQLcommand.Dispose() SQLconnect.Close() Return result Catch ex As Exception ClassLogger.Add("Error in OracleExecute_Scalar: " & ex.Message, True) ClassLogger.Add("#SQL: " & cmdscalar, False) Return Nothing End Try End Function Public Shared Function OracleExecute_non_Query(ExecuteCMD As String, OracleConnection As String, Optional userInput As Boolean = False) Try Dim SQLconnect As New OracleConnection Dim SQLcommand As OracleCommand SQLconnect.ConnectionString = OracleConnection SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Update Last Created Record in Foo SQLcommand.CommandText = ExecuteCMD SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() SQLconnect.Close() Return True Catch ex As Exception If userInput = True Then MsgBox("Error in OracleExecute_non_Query - Error-Message:" & vbNewLine & ex.Message & vbNewLine & "SQL-Command:" & vbNewLine & ExecuteCMD, MsgBoxStyle.Critical) End If ClassLogger.Add("Error in OracleExecute_non_Query: " & ex.Message, True) ClassLogger.Add("#SQL: " & ExecuteCMD, False) Return False End Try End Function Public Shared Function Oracle_Return_Datatable(Select_anweisung As String, OracleConnection As String, Optional userInput As Boolean = False) Try Dim SQLconnect As New OracleConnection Dim SQLcommand As OracleCommand SQLconnect.ConnectionString = OracleConnection SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = Select_anweisung Dim adapter1 As OracleDataAdapter = New OracleDataAdapter(SQLcommand) Dim dt As DataTable = New DataTable() adapter1.Fill(dt) SQLconnect.Close() Return dt Catch ex As Exception If userInput = True Then MsgBox("Error in Oracle Return Datatable - Error-Message:" & vbNewLine & ex.Message & vbNewLine & "SQL-Command:" & vbNewLine & Select_anweisung, MsgBoxStyle.Critical) End If ClassLogger.Add("Error in Oracle_Return_Datatable: " & ex.Message, True) ClassLogger.Add("#SQL: " & Select_anweisung, False) Return Nothing End Try End Function End Class