Aggiunge un connettore completamente managed per database Visual FoxPro e dBase,
utilizzabile come sorgente dati in tutti i flussi dell'applicazione (discovery manuale,
esecuzione schedulata, hash/change-detection, backup/restore).
## Motivazione
Il provider OLE DB ufficiale (VFPOLEDB.1) è solo a 32-bit, deprecato e richiede
installazione separata. Il connettore managed usa DbfDataReader 1.0.0 (MIT), legge
direttamente i file .dbf/.fpt/.dbc a 64-bit senza dipendenze esterne e con streaming
efficiente (tabelle da centinaia di MB con uso di memoria contenuto).
## Nuovi file
- DataConnection/DB/FoxPro/FoxProConnectionInfo.cs
Classe sealed con le informazioni di connessione risolte (cartella, percorso .dbc,
encoding, flag IncludeDeleted). Proprietà di convenienza IsContainer e DisplayName.
- DataConnection/DB/FoxPro/FoxProReader.cs
Helper statico che registra CodePagesEncodingProvider, risolve la connection string
(path diretto, stile OLE DB con Provider=vfpoledb, chiave=valore), verifica l'accesso
al filesystem, legge il catalogo .dbc (il file .dbc è esso stesso un DBF; filtro su
OBJECTTYPE='Table' + cross-check esistenza fisica .dbf), enumera le tabelle free,
mappa i tipi VFP (Character, Memo, Numeric, Float, Double, Integer, Currency, Date,
DateTime, Logical, General) in descrizioni leggibili, esegue streaming dei record via
DbfDataReader, auto-rileva l'encoding dall'header DBF (language driver byte) con
fallback a code page 1252, e analizza query SELECT [TOP n] * FROM tabella.
- DataConnection/DB/FoxProDatabaseManager.cs
Implementa IDatabaseManager. Lettura: TestConnectionAsync, GetTableNamesAsync,
GetTableSchemaAsync, GetDatabaseSchemaAsync, GetAllRecordsAsync, ExecuteRawQueryAsync,
GetPrimaryKeyFieldAsync (ritorna null, selezione manuale chiave), GetAvailableDatabasesAsync,
ChangeDatabaseAsync (no-op per sorgenti file-based).
Scrittura: tutti i metodi di modifica (Insert/Update/Delete/Upsert/BulkInsert/
ExecuteCommand/ExecuteNonQuery) lanciano NotSupportedException con messaggio esplicito.
- DataConnection/DB/EF/SchemaProviders/FoxProSchemaProvider.cs
Implementa IDatabaseSchemaProvider delegando a FoxProReader. Gestione errori per tabella
in GetDatabaseSchemaAsync (una tabella non apribile non blocca la discovery).
- FOXPRO_CONNECTION.md
Guida utente: passo-passo per creare la credenziale, formato connection string,
tabella tipi VFP supportati, note su sola lettura e limitazioni query, tabella
risoluzione problemi (caratteri accentati, tabelle mancanti, ecc.).
## File modificati
- DataConnection/DataConnection.csproj
Aggiunto DbfDataReader 1.0.0 (porta transitivamente System.Text.Encoding.CodePages
>= 10.0.3; rimossa dipendenza esplicita alla versione 9.0.3 che causava NU1605).
- DataConnection/DB/Enums/DatabaseType.cs
Aggiunto valore Foxpro in fondo all'enum (preserva valori già persistiti).
- CredentialManager/Models/CredentialModels.cs
Aggiunto DatabaseType.Foxpro all'enum e metodo BuildFoxproConnectionString che genera
"Data Source=percorso[;CodePage=n][;IncludeDeleted=true]".
- DataConnection/CredentialManagement/Models/CredentialExtensions.cs
Mappatura bidirezionale Foxpro tra enum CredentialManager e DataConnection.
- DataConnection/CredentialManagement/Services/DataConnectionCredentialService.cs
Aggiunto TestFoxproConnection: verifica percorso accessibile, legge nomi tabelle,
restituisce messaggio con conteggio tabelle, encoding rilevato e nota sola lettura.
- DataConnection/DB/EF/DatabaseSchemaProviderFactory.cs
Caso Foxpro => new FoxProSchemaProvider().
- Data_Coupler/Services/DataConnectionFactory.cs
Branch Foxpro => new FoxProDatabaseManager(connectionString).
- Data_Coupler/Extensions/DataCoupler/DatabaseMethod.cs
Aggiunto IsFoxproConnection() e caso Foxpro in CreateLimitedQuery
(SELECT TOP n * FROM (query) AS subquery).
- CredentialManager/Integration/DataConnectionHelper.cs
ValidateDatabaseCredential: introdotto flag isFileBased (Sqlite || Foxpro) per
esonerare host/utente/password/porta; messaggio di errore specifico per il campo
percorso FoxPro.
- Data_Coupler/Pages/CredentialManagement.razor
Aggiunta opzione "Visual FoxPro (.dbc / .dbf)" nel selettore tipo database.
Sezione di configurazione dedicata: banner sola lettura, campo percorso con esempi
(.dbc e cartella), dropdown code page (Auto/1252/1250/1251/850/437/65001), checkbox
record cancellati, pannello tipi supportati, anteprima connection string.
Fix validazione form test-connessione: branch Foxpro che verifica solo DatabaseName
(non Host/Username/Password), eliminando il falso errore "Il campo Host è obbligatorio".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
## 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)
- Aggiunta persistenza campi ODBC (OdbcDsnName, OdbcMode) in CredentialEntity
- Creata migration EF Core per nuovi campi database
- Aggiornato mapping credenziali per caricare/salvare dati ODBC
- Creato OdbcDatabaseManager dedicato (bypass EF Core che non supporta ODBC)
- Aggiornato DataConnectionFactory per usare OdbcDatabaseManager con connessioni ODBC
- Fix auto-load DSN: sostituito @onchange con @bind-Value:after in dropdown tipo database
- Fix test connessione SAP HANA: rimossa query SELECT 1 che causava errori sintassi
- Implementati tutti i metodi IDatabaseManager in OdbcDatabaseManager
- Supporto completo per discovery schema, tabelle e query ODBC
Risolve problema DbContext non configurato per ODBC e abilita connessioni ODBC complete.
- 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
- Aggiunge rilevamento automatico Primary Key per connessioni database
- Rimuove completamente il fallback automatico per lato sorgente
- Implementa selezione manuale obbligatoria per file e sorgenti non-DB
- Migliora UI con suggerimenti intelligenti e feedback visivo
- Aggiunge validazione multi-livello (UI, pre-transfer, runtime)
- Introduce metodo GetPrimaryKeyFieldAsync in IDatabaseManager
- Modifica GenerateSourceKey per richiedere sempre campo specifico
- Implementa controllo IsTransferButtonEnabled per validazione form
Breaking changes:
- La generazione automatica delle chiavi sorgente è stata rimossa
- Il campo chiave sorgente è ora obbligatorio quando si usa il sistema associazioni
Fixes: Risolve problema di discovery schema vuoto con selezione database
- Modificato GetAllRecordsAsync per utilizzare la stessa connection string del discovery schema
- Aggiunto metodo CreateConnection per creare connessioni DB appropriate per tipo
- Migliorata gestione nomi tabelle con schema (es. "dbo.OCRD")
- Rimossi metodi obsoleti di creazione entità (UpdateEntityData, CreateNewEntity)
- Eliminati riferimenti a variabili non dichiarate (newEntityData, isCreatingEntity)
- Aggiunto logging debug per connection string e query SQL
- Completata implementazione trasferimento dati da database a REST API
Il trasferimento dati ora utilizza la stessa connessione per discovery e estrazione,
risolvendo problemi di accesso alle tabelle durante l'operazione di upsert.
feat: Add SqlServerSchemaProvider for extracting database schema information from SQL Server
feat: Introduce DatabaseType and NamingStrategy enums for better database management and naming conventions
feat: Create IDatabaseDiscovery and IDatabaseManager interfaces for database operations and metadata retrieval
feat: Develop REST service client architecture with BaseRestServiceClient and SAP Business One specific implementation
feat: Implement REST service discovery page with UI for connecting to SAP Business One Service Layer and displaying discovered entities