2025-02-20 08:26:52 +01:00

245 lines
11 KiB
VB.net

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