152 lines
5.4 KiB
Plaintext
152 lines
5.4 KiB
Plaintext
@namespace Oqtane.Modules.Admin.Sql
|
|
@inherits ModuleBase
|
|
@inject NavigationManager NavigationManager
|
|
@inject ITenantService TenantService
|
|
@inject IDatabaseService DatabaseService
|
|
@inject ISqlService SqlService
|
|
@inject IStringLocalizer<Index> Localizer
|
|
@inject IStringLocalizer<SharedResources> SharedLocalizer
|
|
|
|
@if (_tenants == null)
|
|
{
|
|
<p><em>@SharedLocalizer["Loading"]</em></p>
|
|
}
|
|
else
|
|
{
|
|
<div class="container">
|
|
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="tenant" HelpText="Select the tenant for the SQL server" ResourceKey="Tenant">Tenant: </Label>
|
|
<div class="col-sm-9">
|
|
<select id="tenant" class="form-select" value="@_tenantid" @onchange="(e => TenantChanged(e))">
|
|
<option value="-1"><@Localizer["Tenant.Select"]></option>
|
|
@foreach (Tenant tenant in _tenants)
|
|
{
|
|
<option value="@tenant.TenantId">@tenant.Name</option>
|
|
}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
@if (_tenantid != "-1")
|
|
{
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="database" HelpText="The database for the tenant" ResourceKey="Database">Database: </Label>
|
|
<div class="col-sm-9">
|
|
<input id="database" class="form-control" @bind="@_database" readonly />
|
|
</div>
|
|
</div>
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="connectionstring" HelpText="The connection information for the database" ResourceKey="ConnectionString">Connection: </Label>
|
|
<div class="col-sm-9">
|
|
<textarea id="connectionstring" class="form-control" @bind="@_connectionstring" rows="2" readonly></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-1 align-items-center">
|
|
<Label Class="col-sm-3" For="sqlQeury" HelpText="Enter the query for the SQL server" ResourceKey="SqlQuery">SQL Query: </Label>
|
|
<div class="col-sm-9">
|
|
<textarea id="sqlQeury" class="form-control" @bind="@_sql" rows="3"></textarea>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
<br />
|
|
<button type="button" class="btn btn-success" @onclick="Execute">@Localizer["Execute"]</button>
|
|
<br />
|
|
<br />
|
|
@if (_results != null)
|
|
{
|
|
@if (_results.Count > 0)
|
|
{
|
|
<Pager Class="table table-bordered" Items="@_results">
|
|
<Header>
|
|
@foreach (KeyValuePair<string, string> kvp in _results.First())
|
|
{
|
|
<th>@kvp.Key</th>
|
|
}
|
|
</Header>
|
|
<Row>
|
|
@foreach (KeyValuePair<string, string> kvp in context)
|
|
{
|
|
<td>@kvp.Value</td>
|
|
}
|
|
</Row>
|
|
</Pager>
|
|
}
|
|
else
|
|
{
|
|
@Localizer["Return.NoResult"]
|
|
}
|
|
<br />
|
|
<br />
|
|
}
|
|
}
|
|
|
|
@code {
|
|
private List<Tenant> _tenants;
|
|
private string _tenantid = "-1";
|
|
private string _database = string.Empty;
|
|
private string _connectionstring = string.Empty;
|
|
private string _sql = string.Empty;
|
|
private List<Dictionary<string, string>> _results;
|
|
|
|
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
try
|
|
{
|
|
_tenants = await TenantService.GetTenantsAsync();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Loading Tenants {Error}", ex.Message);
|
|
AddModuleMessage(ex.Message, MessageType.Error);
|
|
}
|
|
}
|
|
|
|
private async void TenantChanged(ChangeEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
_tenantid = (string)e.Value;
|
|
var tenants = await TenantService.GetTenantsAsync();
|
|
var _databases = await DatabaseService.GetDatabasesAsync();
|
|
var tenant = tenants.Find(item => item.TenantId == int.Parse(_tenantid));
|
|
if (tenant != null)
|
|
{
|
|
_database = _databases.Find(item => item.DBType == tenant.DBType)?.Name;
|
|
_connectionstring = tenant.DBConnectionString;
|
|
}
|
|
StateHasChanged();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Loading Tenant {TenantId} {Error}", _tenantid, ex.Message);
|
|
AddModuleMessage(ex.Message, MessageType.Error);
|
|
}
|
|
}
|
|
|
|
private async Task Execute()
|
|
{
|
|
try
|
|
{
|
|
if (_tenantid != "-1" && !string.IsNullOrEmpty(_sql))
|
|
{
|
|
var sqlquery = new SqlQuery { TenantId = int.Parse(_tenantid), Query = _sql };
|
|
sqlquery = await SqlService.ExecuteQueryAsync(sqlquery);
|
|
_results = sqlquery.Results;
|
|
AddModuleMessage(Localizer["Success.QueryExecuted"], MessageType.Success);
|
|
}
|
|
else
|
|
{
|
|
AddModuleMessage(Localizer["Message.Required.Tenant"], MessageType.Warning);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await logger.LogError(ex, "Error Executing SQL Query {SQL} {Error}", _sql, ex.Message);
|
|
AddModuleMessage(ex.Message, MessageType.Error);
|
|
}
|
|
}
|
|
}
|