269 lines
11 KiB
Plaintext
269 lines
11 KiB
Plaintext
@page "/database-connection"
|
|
@using DataConnection.Enums
|
|
@using DataConnection.Interfaces
|
|
@inject Data.DatabaseConnectionService DatabaseService
|
|
@inject IJSRuntime JSRuntime
|
|
|
|
<PageTitle>Connessione al Database</PageTitle>
|
|
|
|
<h3>Connessione al Database</h3>
|
|
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
Configurazione connessione
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="mb-3">
|
|
<label for="databaseType" class="form-label">Tipo di Database</label>
|
|
<select id="databaseType" class="form-select" @bind="DatabaseService.SelectedDatabaseType">
|
|
<option value="@DatabaseType.SqlServer">SQL Server</option>
|
|
<option value="@DatabaseType.MySql">MySQL</option>
|
|
<option value="@DatabaseType.PostgreSql">PostgreSQL</option>
|
|
<option value="@DatabaseType.Oracle">Oracle</option>
|
|
<option value="@DatabaseType.Sqlite">SQLite</option>
|
|
<option value="@DatabaseType.DB2">DB2</option>
|
|
<option value="@DatabaseType.SapHana">SAP HANA</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="connectionString" class="form-label">Stringa di Connessione</label>
|
|
<input id="connectionString" class="form-control" @bind="DatabaseService.ConnectionString" placeholder="Es. Server=localhost;User Id=sa;Password=password;TrustServerCertificate=True" />
|
|
</div>
|
|
|
|
<div class="d-grid gap-2">
|
|
<button class="btn btn-primary" @onclick="TestConnection" disabled="@isLoading">
|
|
@if (isLoading)
|
|
{
|
|
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
|
|
<span> Connessione in corso...</span>
|
|
}
|
|
else
|
|
{
|
|
<span>Test Connessione</span>
|
|
}
|
|
</button>
|
|
</div>
|
|
|
|
@if (DatabaseService.ErrorMessage != null)
|
|
{
|
|
<div class="alert alert-danger mt-3">
|
|
@DatabaseService.ErrorMessage
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@if (DatabaseService.IsConnected)
|
|
{
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
Database Disponibili
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="mb-3">
|
|
<label for="selectDatabase" class="form-label">Seleziona Database</label>
|
|
<select id="selectDatabase" class="form-select" @bind="DatabaseService.SelectedDatabase">
|
|
<option value="">-- Seleziona un database --</option>
|
|
@foreach (var db in DatabaseService.AvailableDatabases)
|
|
{
|
|
<option value="@db">@db</option>
|
|
}
|
|
</select>
|
|
</div>
|
|
|
|
@if (!string.IsNullOrEmpty(DatabaseService.SelectedDatabase) && databaseInfo != null)
|
|
{
|
|
<div class="mt-3">
|
|
<h5>Dettagli Database</h5>
|
|
<table class="table table-bordered">
|
|
<tbody>
|
|
<tr>
|
|
<th>Nome</th>
|
|
<td>@databaseInfo?.Name</td>
|
|
</tr>
|
|
<tr>
|
|
<th>Dimensione</th>
|
|
<td>@databaseInfo?.SizeMB MB</td>
|
|
</tr>
|
|
<tr>
|
|
<th>Data Creazione</th>
|
|
<td>@databaseInfo?.CreationDate.ToString("dd/MM/yyyy HH:mm")</td>
|
|
</tr>
|
|
<tr>
|
|
<th>Stato</th>
|
|
<td>@databaseInfo?.Status</td>
|
|
</tr>
|
|
<tr>
|
|
<th>Proprietario</th>
|
|
<td>@databaseInfo?.Owner</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<div class="d-grid gap-2 mt-3">
|
|
<button class="btn btn-success" @onclick="ConnectToDatabase" disabled="@isConnecting">
|
|
@if (isConnecting)
|
|
{
|
|
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
|
|
<span> Connessione in corso...</span>
|
|
}
|
|
else
|
|
{
|
|
<span>Connetti al Database</span>
|
|
}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
@if (showSchemaInfo)
|
|
{
|
|
<div class="row mt-4">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
Schema del Database: @DatabaseService.SelectedDatabase
|
|
</div>
|
|
<div class="card-body">
|
|
@if (schemaInfo != null && schemaInfo.Count > 0)
|
|
{
|
|
<div class="table-responsive">
|
|
<table class="table table-striped table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Tabella</th>
|
|
<th>Colonne</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach (var table in schemaInfo)
|
|
{
|
|
<tr>
|
|
<td>@table.Key</td>
|
|
<td>
|
|
<ul class="list-unstyled">
|
|
@foreach (var column in table.Value)
|
|
{
|
|
<li>
|
|
<strong>@column.Name</strong>
|
|
<span class="text-muted">(@column.DataType)</span>
|
|
@if (column.IsPrimaryKey)
|
|
{
|
|
<span class="badge bg-primary">PK</span>
|
|
}
|
|
@if (column.IsForeignKey)
|
|
{
|
|
<span class="badge bg-info">FK → @column.ReferencedTable</span>
|
|
}
|
|
</li>
|
|
}
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="alert alert-info">
|
|
Nessuna informazione sullo schema disponibile.
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
@code {
|
|
private bool isLoading = false;
|
|
private bool isConnecting = false;
|
|
private bool showSchemaInfo = false;
|
|
private DatabaseInfo databaseInfo;
|
|
private IDictionary<string, IEnumerable<DbColumnInfo>> schemaInfo;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
// Puoi impostare valori predefiniti, magari da configurazione
|
|
DatabaseService.ConnectionString = "Server=localhost;User Id=sa;Password=password;TrustServerCertificate=True";
|
|
}
|
|
|
|
private async Task TestConnection()
|
|
{
|
|
try
|
|
{
|
|
isLoading = true;
|
|
showSchemaInfo = false;
|
|
databaseInfo = null;
|
|
|
|
await DatabaseService.TestConnectionAsync();
|
|
|
|
if (DatabaseService.IsConnected)
|
|
{
|
|
await DatabaseService.GetDatabasesInfoAsync();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await JSRuntime.InvokeVoidAsync("console.error", "Errore connessione:", ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
isLoading = false;
|
|
}
|
|
}
|
|
|
|
private async Task ConnectToDatabase()
|
|
{
|
|
if (string.IsNullOrEmpty(DatabaseService.SelectedDatabase))
|
|
return;
|
|
|
|
try
|
|
{
|
|
isConnecting = true;
|
|
showSchemaInfo = false;
|
|
|
|
// Ottieni informazioni sul database selezionato
|
|
if (DatabaseService.DatabasesInfo.TryGetValue(DatabaseService.SelectedDatabase, out var dbInfo))
|
|
{
|
|
databaseInfo = dbInfo;
|
|
}
|
|
|
|
// Crea il database manager e connettiti al database selezionato
|
|
var databaseManager = DatabaseService.GetDatabaseManager();
|
|
|
|
// Verifica la connessione al database specifico
|
|
if (!await databaseManager.TestConnectionAsync())
|
|
{
|
|
throw new Exception($"Non è possibile connettersi al database {DatabaseService.SelectedDatabase}");
|
|
}
|
|
|
|
// Recupera le informazioni sullo schema (tabelle e colonne)
|
|
schemaInfo = await databaseManager.GetDatabaseSchemaAsync();
|
|
|
|
showSchemaInfo = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await JSRuntime.InvokeVoidAsync("console.error", "Errore connessione database:", ex.Message);
|
|
//DatabaseService.ErrorMessage = $"Errore nella connessione al database: {ex.Message}";
|
|
showSchemaInfo = false;
|
|
}
|
|
finally
|
|
{
|
|
isConnecting = false;
|
|
}
|
|
}
|
|
} |