feat: Corregge la logica di rilevamento database specificato nella connection string

- Modifica IsDatabaseSpecifiedInConnectionString per verificare prima il campo DatabaseName della credenziale
- Aggiunge logging dettagliato per debugging del processo di connessione database
- Corregge il flusso di connessione per evitare il modale quando il database è già specificato
- Migliora la gestione degli errori nel caricamento tabelle dal database specificato
- Rimuove codice non raggiungibile nella logica di connessione database

Il bug precedente mostrava sempre il modale di selezione database anche quando
il database era specificato nel campo DatabaseName della credenziale, ora la
verifica segue la logica corretta:
1. Controlla se DatabaseName è valorizzato nella credenziale
2. Solo se vuoto, verifica i parametri Database=/Initial Catalog= nella connection string
This commit is contained in:
Alessio Dal Santo
2025-07-02 15:32:11 +02:00
parent 61883c3467
commit 77efe986a0
7 changed files with 728 additions and 337 deletions
@@ -65,6 +65,17 @@ public interface IDatabaseManager : IDisposable
/// </summary>
Task<IDictionary<string, IEnumerable<DbColumnInfo>>> GetDatabaseSchemaAsync();
/// <summary>
/// Ottiene solo la lista dei nomi delle tabelle disponibili (senza dettagli delle colonne)
/// </summary>
Task<IEnumerable<string>> GetTableNamesAsync();
/// <summary>
/// Ottiene i dettagli delle colonne per una specifica tabella
/// </summary>
/// <param name="tableName">Nome della tabella (con schema se necessario)</param>
Task<IEnumerable<DbColumnInfo>> GetTableSchemaAsync(string tableName);
/// <summary>
/// Ottiene tutti i record da una tabella specifica come dizionari chiave-valore
/// </summary>
@@ -14,4 +14,26 @@ public interface IDatabaseSchemaProvider
/// <param name="connectionString">Stringa di connessione al database</param>
/// <returns>Struttura gerarchica delle tabelle e delle loro colonne</returns>
Task<IDictionary<string, IEnumerable<DbColumnInfo>>> GetDatabaseSchemaAsync(string connectionString);
/// <summary>
/// Ottiene la lista dei database disponibili sul server
/// </summary>
/// <param name="connectionString">Stringa di connessione al server (senza specificare il database)</param>
/// <returns>Lista dei nomi dei database disponibili</returns>
Task<IEnumerable<string>> GetAvailableDatabasesAsync(string connectionString);
/// <summary>
/// Ottiene solo la lista dei nomi delle tabelle disponibili (senza dettagli delle colonne)
/// </summary>
/// <param name="connectionString">Stringa di connessione al database</param>
/// <returns>Lista dei nomi delle tabelle</returns>
Task<IEnumerable<string>> GetTableNamesAsync(string connectionString);
/// <summary>
/// Ottiene i dettagli delle colonne per una specifica tabella
/// </summary>
/// <param name="connectionString">Stringa di connessione al database</param>
/// <param name="tableName">Nome della tabella (con schema se necessario)</param>
/// <returns>Lista delle informazioni sulle colonne</returns>
Task<IEnumerable<DbColumnInfo>> GetTableSchemaAsync(string connectionString, string tableName);
}