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>
4.5 KiB
Connessione a database Visual FoxPro
Data-Coupler supporta i database Visual FoxPro / dBase come sorgente dati (sola lettura)
tramite un lettore completamente managed: legge direttamente i file .dbf (tabelle),
.fpt (campi memo) e .dbc (database container) senza installare alcun provider OLE DB/ODBC
e funzionando a 64-bit.
ℹ️ Perché managed e non OLE DB? Il provider
VFPOLEDB.1di Microsoft è solo a 32-bit, deprecato e va installato a parte. Il lettore managed non ha questi vincoli e funziona ovunque giri l'applicazione (anche in container Linux/Windows a 64-bit).
1. Come connettersi (esempio)
La "connessione" FoxPro è semplicemente un percorso. Non serve host, utente o password.
Passo passo nell'interfaccia
-
Vai su Credenziali → Aggiungi credenziale database.
-
Nome: un nome a piacere (es.
Gestionale FoxPro). -
Tipo Database: seleziona Visual FoxPro (.dbc / .dbf).
-
Percorso Database FoxPro: inserisci uno dei due:
Caso Cosa inserire Esempio Database container percorso completo al file .dbcC:\Users\aless\Desktop\data\Data.dbcTabelle libere (free tables) percorso della cartella con i .dbfC:\Users\aless\Desktop\data -
(Opzionale) Code Page: lascia
1252per dati italiani/europei occidentali. -
(Opzionale) Record cancellati: lascia deselezionato per escludere i record marcati come cancellati.
-
Premi Test connessione: deve mostrare il numero di tabelle rilevate.
-
Salva.
A questo punto la credenziale è utilizzabile come sorgente nella pagina Data Coupler: selezionala, attendi la discovery delle tabelle, scegli la tabella e procedi con il mapping.
2. Formato della connection string
Internamente la credenziale viene tradotta in una stringa interpretata dal lettore FoxPro. Sono accettate tutte queste forme (utile se incolli un percorso o una stringa esistente):
C:\Users\aless\Desktop\data\Data.dbc
C:\Users\aless\Desktop\data
Data Source=C:\Users\aless\Desktop\data\Data.dbc;CodePage=1252;IncludeDeleted=false
Provider=vfpoledb;Data Source=C:\Users\aless\Desktop\data\Data.dbc;Collating Sequence=machine;
Le stringhe stile OLE DB (
Provider=vfpoledb;Data Source=...) sono accettate per comodità: viene estratto automaticamente il valore diData Source.ProvidereCollating Sequencevengono ignorati (il lettore è managed).
Opzioni riconosciute:
| Chiave | Significato | Default |
|---|---|---|
Data Source |
percorso al .dbc o alla cartella di .dbf |
— (obbligatorio) |
CodePage / Encoding |
code page per i campi carattere/memo | auto-rilevata dall'header, fallback 1252 |
IncludeDeleted |
includere i record marcati come cancellati | false |
3. Tipi di dato supportati
| Tipo VFP | Mappato come |
|---|---|
Character (C) |
testo |
Varchar (V) |
testo |
Memo (M, file .fpt) |
testo |
Numeric (N) |
decimale |
Float (F) |
decimale |
Double (B) |
double |
Integer (I) |
intero |
Currency (Y) |
decimale |
Date (D) |
data |
DateTime (T) |
data/ora |
Logical (L) |
booleano |
I file memo (.fpt) e gli indici (.cdx) vengono individuati automaticamente accanto al .dbf.
4. Note e limitazioni
- Sola lettura: FoxPro è utilizzabile solo come sorgente. La scrittura sui
.dbfnon è supportata (eviterebbe il rischio di corrompere indici.cdxe memo.fptdi gestionali legacy in uso). - Elenco tabelle: con un
.dbcviene letto il catalogo del container (solo le tabelle effettivamente presenti come file.dbf); con una cartella vengono elencati tutti i.dbfpresenti. - Query: la sorgente lavora in modalità "tabella" (estrazione completa della tabella selezionata).
Le eventuali query custom supportano solo
SELECT [TOP n] * FROM <tabella>(niente JOIN/WHERE evoluti). - Performance: la lettura è in streaming; anche tabelle da centinaia di MB vengono elaborate con un uso di memoria contenuto.
5. Risoluzione problemi
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| "Cartella del database FoxPro non trovata" | percorso errato | verifica il percorso del .dbc o della cartella |
| "nessuna tabella .dbf trovata" | cartella senza .dbf |
indica la cartella giusta o il file .dbc |
| Caratteri accentati errati | code page diversa | imposta la Code Page corretta (es. 1250, 65001) |
| Una tabella non compare | .dbf referenziato nel .dbc ma file assente |
ripristina il file .dbf mancante |