allow SQL Management to support non-tenant databases

This commit is contained in:
sbwalker
2026-01-19 11:36:27 -05:00
parent b0211b2e6e
commit 1a777b29e0
2 changed files with 129 additions and 121 deletions

View File

@@ -83,14 +83,14 @@ else
{ {
@if (_connection != "-") @if (_connection != "-")
{ {
@if (!string.IsNullOrEmpty(_tenant)) <div class="row mb-1 align-items-center">
{ <Label Class="col-sm-3" For="databasetype" HelpText="The database type" ResourceKey="DatabaseType">Type: </Label>
<div class="row mb-1 align-items-center"> <div class="col-sm-9">
<Label Class="col-sm-3" For="databasetype" HelpText="The database type" ResourceKey="DatabaseType">Type: </Label> <input id="databasetype" class="form-control" @bind="@_databasetype" readonly />
<div class="col-sm-9">
<input id="databasetype" class="form-control" @bind="@_databasetype" readonly />
</div>
</div> </div>
</div>
@if (!string.IsNullOrEmpty(_tenant))
{
<div class="row mb-1 align-items-center"> <div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="tenant" HelpText="The database using this connection" ResourceKey="Tenant">Database: </Label> <Label Class="col-sm-3" For="tenant" HelpText="The database using this connection" ResourceKey="Tenant">Database: </Label>
<div class="col-sm-9"> <div class="col-sm-9">
@@ -150,130 +150,138 @@ else
} }
@code { @code {
private string _connection = "-"; private string _connection = "-";
private Dictionary<string, object> _connections; private Dictionary<string, object> _connections;
private List<Tenant> _tenants; private List<Tenant> _tenants;
private List<Database> _databases; private List<Database> _databases;
private string _name = string.Empty; private string _name = string.Empty;
private string _databasetype = string.Empty; private string _databasetype = string.Empty;
private Type _databaseConfigType; private Type _databaseConfigType;
private object _databaseConfig; private object _databaseConfig;
private RenderFragment DatabaseConfigComponent { get; set; } private RenderFragment DatabaseConfigComponent { get; set; }
private bool _showConnectionString = false; private bool _showConnectionString = false;
private string _tenant = string.Empty; private string _tenant = string.Empty;
private string _connectionstring = string.Empty; private string _connectionstring = string.Empty;
private string _connectionstringtype = "password"; private string _connectionstringtype = "password";
private string _connectionstringtoggle = string.Empty; private string _connectionstringtoggle = string.Empty;
private string _sql = string.Empty; private string _sql = string.Empty;
private List<Dictionary<string, string>> _results; private List<Dictionary<string, string>> _results;
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
try try
{ {
_connections = await SystemService.GetSystemInfoAsync("connectionstrings"); _connections = await SystemService.GetSystemInfoAsync("connectionstrings");
_tenants = await TenantService.GetTenantsAsync(); _tenants = await TenantService.GetTenantsAsync();
_databases = await DatabaseService.GetDatabasesAsync(); _databases = await DatabaseService.GetDatabasesAsync();
_connectionstringtoggle = SharedLocalizer["ShowPassword"]; _connectionstringtoggle = SharedLocalizer["ShowPassword"];
} }
catch (Exception ex) catch (Exception ex)
{ {
await logger.LogError(ex, "Error Loading Tenants {Error}", ex.Message); await logger.LogError(ex, "Error Loading Tenants {Error}", ex.Message);
AddModuleMessage(ex.Message, MessageType.Error); AddModuleMessage(ex.Message, MessageType.Error);
} }
} }
private async void ConnectionChanged(ChangeEventArgs e) private async void ConnectionChanged(ChangeEventArgs e)
{ {
try try
{ {
_connection = (string)e.Value; _connection = (string)e.Value;
if (_connection != "-" && _connection != "+") if (_connection != "-" && _connection != "+")
{ {
_connectionstring = _connections[_connection].ToString(); _connectionstring = _connections[_connection].ToString();
_tenant = ""; _tenant = "";
_databasetype = ""; _databasetype = "";
var tenant = _tenants.FirstOrDefault(item => item.DBConnectionString == _connection); var tenant = _tenants.FirstOrDefault(item => item.DBConnectionString == _connection);
if (tenant != null) if (tenant != null)
{ {
_tenant = tenant.Name; _tenant = tenant.Name;
// hack - there are 3 providers with SqlServerDatabase DBTypes - so we are choosing the last one in alphabetical order // hack - there are 3 providers with SqlServerDatabase DBTypes - so we are choosing the last one in alphabetical order
_databasetype = _databases.Where(item => item.DBType == tenant.DBType).OrderBy(item => item.Name).Last()?.Name; _databasetype = _databases.Where(item => item.DBType == tenant.DBType).OrderBy(item => item.Name).Last()?.Name;
} }
} else
else {
{ if (_connection.Contains(" ("))
if (_databases.Exists(item => item.IsDefault)) {
{ _databasetype = _connection.Substring(_connection.LastIndexOf(" (") + 2).Replace(")", "");
_databasetype = _databases.Find(item => item.IsDefault).Name; }
} }
else }
{ else
{
if (_databases.Exists(item => item.IsDefault))
{
_databasetype = _databases.Find(item => item.IsDefault).Name;
}
else
{
_databasetype = Constants.DefaultDBName; _databasetype = Constants.DefaultDBName;
} }
_showConnectionString = false; _showConnectionString = false;
LoadDatabaseConfigComponent(); LoadDatabaseConfigComponent();
} }
StateHasChanged(); StateHasChanged();
} }
catch (Exception ex) catch (Exception ex)
{ {
await logger.LogError(ex, "Error Loading Connection {Connection} {Error}", _connection, ex.Message); await logger.LogError(ex, "Error Loading Connection {Connection} {Error}", _connection, ex.Message);
AddModuleMessage(ex.Message, MessageType.Error); AddModuleMessage(ex.Message, MessageType.Error);
} }
} }
private void DatabaseTypeChanged(ChangeEventArgs eventArgs) private void DatabaseTypeChanged(ChangeEventArgs eventArgs)
{ {
try try
{ {
_databasetype = (string)eventArgs.Value; _databasetype = (string)eventArgs.Value;
_showConnectionString = false; _showConnectionString = false;
LoadDatabaseConfigComponent(); LoadDatabaseConfigComponent();
} }
catch catch
{ {
AddModuleMessage(Localizer["Error.Database.LoadConfig"], MessageType.Error); AddModuleMessage(Localizer["Error.Database.LoadConfig"], MessageType.Error);
} }
} }
private void LoadDatabaseConfigComponent() private void LoadDatabaseConfigComponent()
{ {
var database = _databases.SingleOrDefault(d => d.Name == _databasetype); var database = _databases.SingleOrDefault(d => d.Name == _databasetype);
if (database != null) if (database != null)
{ {
_databaseConfigType = Type.GetType(database.ControlType); _databaseConfigType = Type.GetType(database.ControlType);
DatabaseConfigComponent = builder => DatabaseConfigComponent = builder =>
{ {
builder.OpenComponent(0, _databaseConfigType); builder.OpenComponent(0, _databaseConfigType);
builder.AddComponentReferenceCapture(1, inst => { _databaseConfig = Convert.ChangeType(inst, _databaseConfigType); }); builder.AddComponentReferenceCapture(1, inst => { _databaseConfig = Convert.ChangeType(inst, _databaseConfigType); });
builder.CloseComponent(); builder.CloseComponent();
}; };
} }
} }
private void ShowConnectionString() private void ShowConnectionString()
{ {
if (_databaseConfig is IDatabaseConfigControl databaseConfigControl) if (_databaseConfig is IDatabaseConfigControl databaseConfigControl)
{ {
_connectionstring = databaseConfigControl.GetConnectionString(); _connectionstring = databaseConfigControl.GetConnectionString();
} }
_showConnectionString = !_showConnectionString; _showConnectionString = !_showConnectionString;
} }
private async Task Add() private async Task Add()
{ {
var connectionstring = _connectionstring; var connectionstring = _connectionstring;
if (!_showConnectionString && _databaseConfig is IDatabaseConfigControl databaseConfigControl) if (!_showConnectionString && _databaseConfig is IDatabaseConfigControl databaseConfigControl)
{ {
connectionstring = databaseConfigControl.GetConnectionString(); connectionstring = databaseConfigControl.GetConnectionString();
} }
if (!string.IsNullOrEmpty(_name) && !string.IsNullOrEmpty(connectionstring)) if (!string.IsNullOrEmpty(_name) && !string.IsNullOrEmpty(connectionstring))
{ {
var settings = new Dictionary<string, object>(); _name = _name + " (" + _databasetype +")";
var settings = new Dictionary<string, object>();
settings.Add($"{SettingKeys.ConnectionStringsSection}:{_name}", connectionstring); settings.Add($"{SettingKeys.ConnectionStringsSection}:{_name}", connectionstring);
await SystemService.UpdateSystemInfoAsync(settings); await SystemService.UpdateSystemInfoAsync(settings);
_connections = await SystemService.GetSystemInfoAsync("connectionstrings"); _connections = await SystemService.GetSystemInfoAsync("connectionstrings");

View File

@@ -128,7 +128,7 @@ namespace Oqtane.Controllers
} }
break; break;
default: default:
_configManager.AddOrUpdateSetting(key, value, false); _configManager.AddOrUpdateSetting(key, value, true);
break; break;
} }
} }