Ciao Nick60,
il problema deriva dal fatto che SQLCE tiene un buffer delle modifiche (delle transazioni in realtá) in memoria per ragioni di performance. Il problema non é la non chiusura della connessione, ma il fatto che fermi il processo prima che lui faccia il flush delle modifiche rendendole persistenti.
Fra i parametri della connection string puoi regolare questo funzionamento:
1) Il parametro autoflush (true per default) indica appunto se far fare a lui il flush a intervalli regolari oppure disabilitare la funzione. Se la disabiliti ogni modifica fatta (o ogni transazione) viene committata immediatamente
2) max buffer size: 640KB per default é il limite superato il quale viene fatto il flush su disco in caso di autoflush
3) Flush interval: 10 secondi per default é l'intervallo di tempo ogni quanto lui fa il flush.
Il fatto quindi che non vedi le modifiche deriva appunto dal flushing che viene fatto solo superati i 640KB di transazione o i 10 secondi di tempo. Ti consiglio di lasciare queste impostazioni al default nelle normali operazioni che fai sul DB in quanto migliorano le performance.
Durante un aggiornamento massimo potresti aprire la connessione con questi parametri diversi (autoflush a false é sufficiente) per inserire un record alla volta.
Se vuoi puoi anche gestire manualmente la transazione usando l'oggetto SqlCeTransaction, ma anche quando fai commit, se autoflush é true vengono rispettati i paramtri 2 e 3 che ti ho indicato.
Un ultimo consiglio rispetto al codice: fai la Dispose() degli oggetti: commandSourceData, textFileDataReader e cmd. Per le connection non ne hai bisogno visto che usi la using.