@using LANCommander.Server.Settings.Enums @using Microsoft.Data.Sqlite @using MySqlConnector @using Npgsql @switch (Provider) { case DatabaseProvider.SQLite: break; case DatabaseProvider.MySQL:
break; case DatabaseProvider.PostgreSQL:
break; default: break; } @code { [Parameter] public DatabaseProvider Provider { get; set; } [Parameter] public string ConnectionString { get; set; } = String.Empty; [Parameter] public EventCallback ConnectionStringChanged { get; set; } SqliteConnectionStringBuilder SqliteBuilder = new(); MySqlConnectionStringBuilder MySqlBuilder = new(); NpgsqlConnectionStringBuilder NpgsqlBuilder = new(); DatabaseProvider _lastProvider = DatabaseProvider.Unknown; string _lastConnectionString = String.Empty; protected override void OnParametersSet() { if (Provider != _lastProvider || ConnectionString != _lastConnectionString) { ParseConnectionString(); _lastProvider = Provider; _lastConnectionString = ConnectionString; } } void ParseConnectionString() { try { switch (Provider) { case DatabaseProvider.SQLite: SqliteBuilder = new SqliteConnectionStringBuilder(ConnectionString ?? String.Empty); break; case DatabaseProvider.MySQL: MySqlBuilder = new MySqlConnectionStringBuilder(ConnectionString ?? String.Empty); break; case DatabaseProvider.PostgreSQL: NpgsqlBuilder = new NpgsqlConnectionStringBuilder(ConnectionString ?? String.Empty); break; } } catch { // The existing connection string doesn't match the selected provider, start fresh. SqliteBuilder = new(); MySqlBuilder = new(); NpgsqlBuilder = new(); } } async Task UpdateConnectionString() { var result = Provider switch { DatabaseProvider.SQLite => SqliteBuilder.ConnectionString, DatabaseProvider.MySQL => MySqlBuilder.ConnectionString, DatabaseProvider.PostgreSQL => NpgsqlBuilder.ConnectionString, _ => ConnectionString }; ConnectionString = result; _lastConnectionString = result; if (ConnectionStringChanged.HasDelegate) await ConnectionStringChanged.InvokeAsync(result); } }