82e0d6bc77
## Nuovi file - DataConnection/DB/OleDbDatabaseManager.cs: Manager completo per connessioni OLE DB con supporto Task.Run() per operazioni sincrone, parametri posizionali '?', guard per piattaforma Windows, nessun supporto ChangeDatabaseAsync (no-op) - DataConnection/DB/EF/SchemaProviders/OleDbSchemaProvider.cs: Schema provider per OLE DB, usa OleDbSchemaGuid per tabelle/colonne/chiavi primarie, mapping tipi dati - CredentialManager/Services/OleDbProviderDiscoveryService.cs: Servizio di discovery provider OLE DB installati tramite registro Windows (HKEY_CLASSES_ROOT). Rileva 9 provider noti: VFPOLEDB.1, Microsoft.ACE.OLEDB.12.0, Jet 4.0, SQLOLEDB, ecc. Mostra warning per provider solo 32-bit (VFPOLEDB, Jet) - PUBLISH_32BIT_64BIT.md: Documentazione completa comandi pubblicazione per win-x64, win-x86 (richiesto per VFP), linux-x64, osx-x64, osx-arm64. Include prerequisiti VFPOLEDB, esempi connection string VFP, note Docker ## File modificati - DataConnection/DB/Enums/DatabaseType.cs: Aggiunto valore OleDb dopo Odbc - DataConnection/DataConnection.csproj: Aggiunto pacchetto System.Data.OleDb 9.0.3 - DataConnection/DB/OdbcDatabaseManager.cs: Fix bug ChangeDatabaseAsync con try-catch - CredentialManager/Models/CredentialModels.cs: Aggiunto OleDb all'enum DatabaseType, BuildOleDbConnectionString() con supporto provider da AdditionalParameters, default VFPOLEDB.1, costruzione connection string con parametri VFP - DataConnection/CredentialManagement/Models/CredentialExtensions.cs: Mappatura OleDb in ToDataConnectionDatabaseType() e ToCredentialDatabaseType() - DataConnection/CredentialManagement/Services/DataConnectionCredentialService.cs: Aggiunto case OleDb in TestDatabaseConnectionAsync e metodo TestOleDbConnection() con apertura connessione via Task.Run() e gestione OleDbException dettagliata - Data_Coupler/Services/DataConnectionFactory.cs: Aggiunto case OleDb per creazione OleDbDatabaseManager - Data_Coupler/Program.cs: Registrazione IOleDbProviderDiscoveryService come Scoped - Data_Coupler/Pages/CredentialManagement.razor: Aggiunta UI completa OLE DB con sezione dedicata Visual FoxPro (percorso .dbc/.dbf, Collating Sequence, DELETED), provider discovery con refresh, anteprima connection string, variabili di stato e metodi nel codice Blazor, sincronizzazione AdditionalParameters al salvataggio ## Compatibilità - VFP 8.0/9.0: testato con VFPOLEDB.1, connessione file-based .dbc e .dbf - Richiede pubblicazione win-x86 per driver OLE DB 32-bit - AnyCPU non supportato per VFP (COM 32-bit)
106 lines
4.6 KiB
C#
106 lines
4.6 KiB
C#
using CredentialManager.Models;
|
|
|
|
namespace DataConnection.CredentialManagement.Models;
|
|
|
|
/// <summary>
|
|
/// Extension methods per convertire le credenziali CredentialManager in oggetti DataConnection
|
|
/// </summary>
|
|
public static class CredentialExtensions
|
|
{
|
|
/// <summary>
|
|
/// Converte il tipo di database da CredentialManager.Models.DatabaseType a DataConnection.Enums.DatabaseType
|
|
/// </summary>
|
|
public static DataConnection.Enums.DatabaseType ToDataConnectionDatabaseType(this CredentialManager.Models.DatabaseType credentialDbType)
|
|
{
|
|
return credentialDbType switch
|
|
{
|
|
CredentialManager.Models.DatabaseType.SqlServer => DataConnection.Enums.DatabaseType.SqlServer,
|
|
CredentialManager.Models.DatabaseType.MySql => DataConnection.Enums.DatabaseType.MySql,
|
|
CredentialManager.Models.DatabaseType.PostgreSql => DataConnection.Enums.DatabaseType.PostgreSql,
|
|
CredentialManager.Models.DatabaseType.Oracle => DataConnection.Enums.DatabaseType.Oracle,
|
|
CredentialManager.Models.DatabaseType.Sqlite => DataConnection.Enums.DatabaseType.Sqlite,
|
|
CredentialManager.Models.DatabaseType.DB2 => DataConnection.Enums.DatabaseType.DB2,
|
|
CredentialManager.Models.DatabaseType.SapHana => DataConnection.Enums.DatabaseType.SapHana,
|
|
CredentialManager.Models.DatabaseType.Odbc => DataConnection.Enums.DatabaseType.Odbc,
|
|
CredentialManager.Models.DatabaseType.OleDb => DataConnection.Enums.DatabaseType.OleDb,
|
|
_ => throw new NotSupportedException($"Database type {credentialDbType} not supported")
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// Converte il tipo di database da DataConnection.Enums.DatabaseType a CredentialManager.Models.DatabaseType
|
|
/// </summary>
|
|
public static CredentialManager.Models.DatabaseType ToCredentialDatabaseType(this DataConnection.Enums.DatabaseType dataConnectionDbType)
|
|
{
|
|
return dataConnectionDbType switch
|
|
{
|
|
DataConnection.Enums.DatabaseType.SqlServer => CredentialManager.Models.DatabaseType.SqlServer,
|
|
DataConnection.Enums.DatabaseType.MySql => CredentialManager.Models.DatabaseType.MySql,
|
|
DataConnection.Enums.DatabaseType.PostgreSql => CredentialManager.Models.DatabaseType.PostgreSql,
|
|
DataConnection.Enums.DatabaseType.Oracle => CredentialManager.Models.DatabaseType.Oracle,
|
|
DataConnection.Enums.DatabaseType.Sqlite => CredentialManager.Models.DatabaseType.Sqlite,
|
|
DataConnection.Enums.DatabaseType.DB2 => CredentialManager.Models.DatabaseType.DB2,
|
|
DataConnection.Enums.DatabaseType.SapHana => CredentialManager.Models.DatabaseType.SapHana,
|
|
DataConnection.Enums.DatabaseType.Odbc => CredentialManager.Models.DatabaseType.Odbc,
|
|
DataConnection.Enums.DatabaseType.OleDb => CredentialManager.Models.DatabaseType.OleDb,
|
|
_ => throw new NotSupportedException($"Database type {dataConnectionDbType} not supported")
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// Crea una DatabaseCredential da parametri di connessione
|
|
/// </summary>
|
|
public static DatabaseCredential CreateDatabaseCredential(
|
|
string name,
|
|
DataConnection.Enums.DatabaseType databaseType,
|
|
string host,
|
|
int port,
|
|
string databaseName,
|
|
string username,
|
|
string password,
|
|
int commandTimeout = 30,
|
|
bool ignoreSslErrors = false)
|
|
{
|
|
return new DatabaseCredential
|
|
{
|
|
Name = name,
|
|
DatabaseType = databaseType.ToCredentialDatabaseType(),
|
|
Host = host,
|
|
Port = port,
|
|
DatabaseName = databaseName,
|
|
Username = username,
|
|
Password = password,
|
|
CommandTimeout = commandTimeout,
|
|
IgnoreSslErrors = ignoreSslErrors
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// Crea una RestApiCredential da parametri di connessione
|
|
/// </summary>
|
|
public static RestApiCredential CreateRestApiCredential(
|
|
string name,
|
|
string baseUrl,
|
|
string? apiKey = null,
|
|
string? username = null,
|
|
string? password = null,
|
|
string? authToken = null,
|
|
int timeoutSeconds = 100,
|
|
bool ignoreSslErrors = false,
|
|
Dictionary<string, string>? headers = null)
|
|
{
|
|
return new RestApiCredential
|
|
{
|
|
Name = name,
|
|
BaseUrl = baseUrl,
|
|
ApiKey = apiKey,
|
|
Username = username,
|
|
Password = password,
|
|
AuthToken = authToken,
|
|
TimeoutSeconds = timeoutSeconds,
|
|
IgnoreSslErrors = ignoreSslErrors,
|
|
Headers = headers
|
|
};
|
|
}
|
|
}
|