Imports System.Data.SqlClient Imports System.Data.Odbc Imports Microsoft.Win32 Imports DigitalData.Modules.Database.Constants Imports DigitalData.Modules Public Class frmConnection Private Sub TBDD_CONNECTIONBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Validate() TBDD_CONNECTIONBindingSource.EndEdit() TableAdapterManager.UpdateAll(MyDataset) End Sub Private Sub frmConnection_Load(sender As Object, e As EventArgs) Handles MyBase.Load Load_Connections() Dim oSystemConnections = LoadOdbcConnections(Registry.LocalMachine) Dim oUserConnections = LoadOdbcConnections(Registry.CurrentUser) For Each oDSN In oSystemConnections ODBCServerTextBox.Items.Add(oDSN) Next For Each oDSN In oUserConnections ODBCServerTextBox.Items.Add(oDSN) Next End Sub Private Sub Load_Connections() Try TBDD_CONNECTIONTableAdapter.Connection.ConnectionString = MyConnectionString TBDD_CONNECTIONTableAdapter.Fill(MyDataset.TBDD_CONNECTION) Catch ex As Exception Logger.Error(ex) MsgBox("Fehler beim Laden der Verbindungen: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, Text) End Try End Sub Private Function LoadOdbcConnections(Root As RegistryKey) As List(Of String) Dim oConnections As New List(Of String) Try Dim oPath As String = "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources" Dim oKey As RegistryKey = Root.OpenSubKey(oPath, False) If oKey Is Nothing Then Return oConnections End If For Each oName In oKey.GetValueNames oConnections.Add(oName) Next Return oConnections Catch ex As Exception Logger.Error(ex) Return oConnections End Try End Function Private Sub TBDD_CONNECTIONBindingSource_AddingNew(sender As Object, e As System.ComponentModel.AddingNewEventArgs) Handles TBDD_CONNECTIONBindingSource.AddingNew MyDataset.TBDD_CONNECTION.AKTIVColumn.DefaultValue = True MyDataset.TBDD_CONNECTION.ERSTELLTWERColumn.DefaultValue = Environment.UserName MyDataset.TBDD_CONNECTION.SQL_PROVIDERColumn.DefaultValue = "MS-SQL" End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) ConnectionTest(SQL_PROVIDERComboBox.Text, chkWinAuth.Checked, SERVERTextBox.Text, USERNAMETextBox.Text, PASSWORDTextBox.Text, DATENBANKComboBox.Text) End Sub Private Sub ConnectionTest(ConnectionType As String, WinAuth As Boolean, Server As String, UserId As String, Password As String, Database As String) Dim oConnectionString As String = String.Empty Select Case ConnectionType Case PROVIDER_MSSQL If WinAuth Then oConnectionString = $"Data Source={Server};Initial Catalog={Database};Trusted_Connection=True;" Else oConnectionString = $"Server={Server};Database={Database};User Id={UserId};Password={Password};" End If Using oConnection As New SqlConnection(oConnectionString) Try oConnection.Open() MsgBox("Die Verbindung wurde erfolgreich aufgebaut!", MsgBoxStyle.Information, Text) Catch ex As Exception Logger.Error(ex) MsgBox("Fehler beim Verbindungsaufbau (MSSQL): " & vbNewLine & ex.Message, MsgBoxStyle.Exclamation, Text) End Try End Using Case PROVIDER_ORACLE Try oConnectionString = $"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={Server})(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={Database})));User Id={UserId};Password={Password};" Dim oOracle As New Database.Oracle(LogConfig, oConnectionString) If oOracle.DBInitialized Then MsgBox("Die Verbindung wurde erfolgreich aufgebaut!", MsgBoxStyle.Information, Text) Else MsgBox("Fehler beim Verbindungsaufbau (ORACLE): Fehler im Log", MsgBoxStyle.Critical, Text) End If Catch ex As Exception Logger.Error(ex) MsgBox("Fehler beim Verbindungsaufbau (ORACLE): " & vbNewLine & ex.Message, MsgBoxStyle.Critical, Text) End Try Case PROVIDER_ODBC Try oConnectionString = $"DSN={Server};UID={UserId};PWD={Password}" Using oConnection As New OdbcConnection(oConnectionString) oConnection.Open() MsgBox("Die Verbindung wurde erfolgreich aufgebaut!", MsgBoxStyle.Information, Text) End Using Catch ex As Exception Logger.Error(ex) MsgBox("Fehler beim Verbindungsaufbau (ODBC): " & vbNewLine & ex.Message, MsgBoxStyle.Critical, Text) End Try End Select End Sub Private Sub DATENBANKComboBox_Click(sender As Object, e As EventArgs) Handles DATENBANKComboBox.Click Cursor = Cursors.WaitCursor Dim oConnectionBuilder As New SqlConnectionStringBuilder If SERVERTextBox.Text = String.Empty Then MsgBox("Bitte geben sie einen Server an!") Exit Sub End If If SQL_PROVIDERComboBox.Text = PROVIDER_ORACLE Then Exit Sub End If If chkWinAuth.Checked Then oConnectionBuilder.DataSource = SERVERTextBox.Text oConnectionBuilder.IntegratedSecurity = True Else If USERNAMETextBox.Text = String.Empty Or PASSWORDTextBox.Text = String.Empty Then MsgBox("Bitte geben sie Benutzer und Passwort an!", MsgBoxStyle.Exclamation, Text) Exit Sub End If oConnectionBuilder.DataSource = SERVERTextBox.Text oConnectionBuilder.IntegratedSecurity = False oConnectionBuilder.UserID = USERNAMETextBox.Text oConnectionBuilder.Password = PASSWORDTextBox.Text End If Try Using oConnection As New SqlConnection(oConnectionBuilder.ToString) oConnection.Open() Using oCmd As New SqlCommand("sp_databases", oConnection) With {.CommandType = CommandType.StoredProcedure} Using oReader As SqlDataReader = oCmd.ExecuteReader If oReader.HasRows Then DATENBANKComboBox.Items.Clear() Do While oReader.Read() DATENBANKComboBox.Items.Add(oReader.Item("Database_Name")) Loop DATENBANKComboBox.DroppedDown = True Else MsgBox("The standard-databases could not be retrieved." & vbNewLine & "Check rights in sql-server for user", MsgBoxStyle.Exclamation) End If End Using End Using End Using Catch ex As Exception Logger.Error(ex) MsgBox("Error while loading Databases:" & vbCrLf & ex.Message, MsgBoxStyle.Critical, Text) Finally Cursor = Cursors.Default End Try End Sub Private Sub chkWinAuth_CheckedChanged(sender As Object, e As EventArgs) Handles chkWinAuth.CheckedChanged If chkWinAuth.Checked Then USERNAMETextBox.Enabled = False USERNAMETextBox.Text = "WINAUTH" PASSWORDTextBox.Enabled = False PASSWORDTextBox.Text = "" Else USERNAMETextBox.Enabled = True USERNAMETextBox.Text = "" PASSWORDTextBox.Enabled = True PASSWORDTextBox.Text = "" End If End Sub Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonAdd.ItemClick TBDD_CONNECTIONBindingSource.AddNew() End Sub Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonDelete.ItemClick Try If GUIDTextBox.Text <> String.Empty Then Dim oSQL = $"SELECT dbo.FNCW_GET_SEARCH_COUNT_FOR_CONNECTION({GUIDTextBox.Text})" Dim oCount = MyDB_DDECM.GetScalarValue(oSQL) If oCount IsNot Nothing AndAlso oCount = 0 Then Dim oResult As MsgBoxResult = MsgBox("Wollen Sie die Verbindung wirklich löschen?", MsgBoxStyle.YesNo, Text) If oResult = MsgBoxResult.Yes Then TBDD_CONNECTIONTableAdapter.Delete(GUIDTextBox.Text) End If Else MsgBox($"Die Verbindung '{BEZEICHNUNGTextBox.Text}' kann nicht gelöscht werden, da sie von mindestens einer Suche verwendet wird!", MsgBoxStyle.Exclamation, Text) End If End If Catch ex As Exception Logger.Error(ex) MsgBox("Fehler beim Löschen der Verbindung: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, Text) End Try End Sub Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonSave.ItemClick Validate() TBDD_CONNECTIONBindingSource.EndEdit() TableAdapterManager.UpdateAll(MyDataset) End Sub Private Sub BarButtonItem1_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick ConnectionTest(SQL_PROVIDERComboBox.Text, chkWinAuth.Checked, SERVERTextBox.Text, USERNAMETextBox.Text, PASSWORDTextBox.Text, DATENBANKComboBox.Text) End Sub Private Sub SQL_PROVIDERComboBox_SelectedValueChanged(sender As Object, e As EventArgs) Handles SQL_PROVIDERComboBox.SelectedValueChanged If SQL_PROVIDERComboBox.Text = PROVIDER_ODBC Then DATENBANKComboBox.Enabled = False ODBCServerTextBox.Enabled = True chkWinAuth.Enabled = False Else DATENBANKComboBox.Enabled = True ODBCServerTextBox.Enabled = False chkWinAuth.Enabled = True End If End Sub Private Sub ODBCServerTextBox_SelectedValueChanged(sender As Object, e As EventArgs) Handles ODBCServerTextBox.SelectedValueChanged If ODBCServerTextBox.Text <> String.Empty Then SERVERTextBox.Text = ODBCServerTextBox.Text BEZEICHNUNGTextBox.Text = ODBCServerTextBox.Text End If End Sub End Class