private void Window_Loaded(object sender, RoutedEventArgs e) { var databaseType = (DatabaseType)Enum.Parse(typeof(DatabaseType), ConfigurationManager.AppSettings["DatabaseType"]); radMSAccess.IsChecked = databaseType == DatabaseType.File; radPostgreSQL.IsChecked = databaseType == DatabaseType.Server; if (databaseType == DatabaseType.Unknown) { bdrMessage.Visibility = Visibility.Visible; } if (radPostgreSQL.IsChecked == true) { bdrMessage.Visibility = Visibility.Collapsed; try { using (var context = new PostgreSQL.Model.StudentElectionContext()) { var connectionString = context.Database.Connection.ConnectionString; if (connectionString.Contains("Port=")) { txtPort.Text = connectionString.Split(';') .First(s => s.Contains("Port=")) .Split('=')[1]; } if (connectionString.Contains("Host=")) { txtIPAddress.Text = connectionString.Split(';') .First(s => s.Contains("Host=")) .Split('=')[1]; } if (connectionString.Contains("Database=")) { txtDatabaseName.Text = connectionString.Split(';') .First(s => s.Contains("Database=")) .Split('=')[1]; } if (connectionString.Contains("Username="******"Username="******"Unable to load the connection string", "Connection string error", MessageBoxButton.OK, MessageBoxImage.Error); } txtNetworkFolderAddress.Text = Properties.Network.Default.NetworkFolderAddress; txtNetworkFolderName.Text = Properties.Network.Default.NetworkFolderName; } }
private async void BtnConnect_Click(object sender, RoutedEventArgs e) { var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var userSettings = (UserSettingsGroup)configFile.GetSectionGroup("userSettings"); if (radMSAccess.IsChecked == true) { if (!IsMdbFileExisting()) { MessageBox.Show($"'{ App.MdbFileName }' file does not exist in\n{ App.ExeDirectory }", "Connection error", MessageBoxButton.OK, MessageBoxImage.Error); return; } configFile.AppSettings.Settings.Remove("DatabaseType"); configFile.AppSettings.Settings.Add("DatabaseType", DatabaseType.File.ToString()); Properties.Network.Default.NetworkFolderAddress = string.Empty; Properties.Network.Default.NetworkFolderName = string.Empty; SetRepositories(configFile, MSAccessDatabaseName); configFile.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection(configFile.ConnectionStrings.SectionInformation.Name); ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name); Properties.Network.Default.Save(); MessageBox.Show("Successfully connected to the MS Access database :D\n\nThe program will now restart.", "Connection success", MessageBoxButton.OK, MessageBoxImage.Information); RestartSystem(); this.DialogResult = true; } else if (radPostgreSQL.IsChecked == true) { int port = 0; string host = string.Empty; string networkFolderName = txtNetworkFolderName.Text; if (!string.IsNullOrWhiteSpace(txtPort.Text) && !int.TryParse(txtPort.Text, out port)) { MessageBox.Show("Invalid port number", "Connection error", MessageBoxButton.OK, MessageBoxImage.Error); txtPort.Focus(); return; } if (!string.IsNullOrWhiteSpace(txtIPAddress.Text) && IsLocalIpAddress(txtIPAddress.Text)) { host = txtIPAddress.Text; } else if (IPAddress.TryParse(txtIPAddress.Text, out var ipAddress)) { host = ipAddress.ToString(); } else { MessageBox.Show("Invalid host", "Connection error", MessageBoxButton.OK, MessageBoxImage.Error); txtIPAddress.Focus(); return; } if (string.IsNullOrWhiteSpace(txtNetworkFolderAddress.Text)) { MessageBox.Show("Enter the network folder address", "Connection error", MessageBoxButton.OK, MessageBoxImage.Error); txtNetworkFolderAddress.Focus(); return; } if (string.IsNullOrWhiteSpace(networkFolderName)) { MessageBox.Show("Enter the network folder name", "Connection error", MessageBoxButton.OK, MessageBoxImage.Error); txtNetworkFolderName.Focus(); return; } if (!Directory.Exists($"{ txtNetworkLocation.Text }")) { MessageBox.Show($"Network location '{ txtNetworkLocation.Text }' does not exist", "Connection error", MessageBoxButton.OK, MessageBoxImage.Error); txtNetworkFolderAddress.Focus(); return; } string database = txtDatabaseName.Text; string userName = txtUserName.Text; string password = pwdServer.Password; var connectionStringBuilder = new StringBuilder(); if (port != 0) { connectionStringBuilder.Append($"Port={ port };"); } connectionStringBuilder.Append($"Host={ host };"); connectionStringBuilder.Append($"Database={ database };"); connectionStringBuilder.Append($"Username={ userName };"); connectionStringBuilder.Append($"Password={ password };"); string connectionString = connectionStringBuilder.ToString(); try { G.WaitLang(this); using (var context = new PostgreSQL.Model.StudentElectionContext()) { context.Database.Connection.ConnectionString = connectionString; await context.Database.Connection.OpenAsync(); if (context.Database.Connection.State == System.Data.ConnectionState.Open) { context.Database.Connection.Close(); } else { throw new NpgsqlException("Cannot open database"); } } configFile.AppSettings.Settings.Remove("DatabaseType"); configFile.AppSettings.Settings.Add("DatabaseType", DatabaseType.Server.ToString()); Properties.Network.Default.NetworkFolderAddress = host; Properties.Network.Default.NetworkFolderName = networkFolderName; configFile.ConnectionStrings .ConnectionStrings["StudentElectionContext"] .ConnectionString = $"metadata=res://*/Model.StudentElectionContext.csdl|res://*/Model.StudentElectionContext.ssdl|res://*/Model.StudentElectionContext.msl;" + $"provider=Npgsql;" + $"provider connection string=\"{ connectionString }\""; SetRepositories(configFile, PostgreSQLDatabaseName); configFile.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection(configFile.ConnectionStrings.SectionInformation.Name); ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name); Properties.Network.Default.Save(); G.EndWait(this); MessageBox.Show("Successfully connected to a PostgreSQL database :D\n\nThe program will now restart.", "Connection success", MessageBoxButton.OK, MessageBoxImage.Information); RestartSystem(); this.DialogResult = true; } catch (Exception ex) { Logger.LogError(ex); G.EndWait(this); MessageBox.Show(ex.GetBaseException().Message, "Connection error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Select a database to use", "No selected database", MessageBoxButton.OK, MessageBoxImage.Error); } }