Come si è visto nello script #237, il motore di SQL Server Compact 4 lavora in-process ed è pensato per database di contenute dimensioni, ma che comunque necessitano di buone prestazioni per le operazioni relazionali.
Poiché il motore persiste le informazioni su unico file, solitamente con estensione sdf, può capitare che possa fallire l'operazione di scrittura su disco o che la scrittura delle page, blocchi di informazioni con le quali vengono identificate le righe, vada parzialmente a buon fine, magari perché il processo si è interrotto in quella fase.
Come per il fratello maggiore, SQL Server, anche il database ha bisogno quindi di essere amministrato in modo da resistere nel tempo ed evitare che informazioni vengano perse. Per l'esecuzione di questa attività manutentiva, la classe SqlCeEngine mette a disposizione alcuni metodi che andrebbero, come buona norma, chiamati allo startup dell'applicazione.
Il primo passo da compiere solitamente consiste nel verificare l'integrità del database e in particolare nella verifica del checksum di ogni page del database. Nel caso dovesse fallire è possibile chiamare il metodo Repair che, in base all'opzione specifica, può scartare i record che risultano non essere corretti, oppure ripristinarli, ma con potenziali errori nelle informazioni delle colonne.
using (SqlCeEngine engine = new SqlCeEngine("Data Source=test.sdf")) { // Verifico il database if (engine.Verify(VerifyOption.Enhanced)) { // Recupero le righe scartando quelle corrotte engine.Repair(null, RepairOption.DeleteCorruptedRows); } }
Un'altra attività da effettuare regolarmente va invece incontro alla potenziale frammentazione del file fisico a seguito di molteplici operazioni sul database. Frequenti update o cancellazioni possono, per motivi prestazionali, lasciare degli offeset di byte liberi, ma che contribuiscono ad aumentare la dimensione del database. In questo caso è opportuno procedere allo shrink, possibile con l'omonimo metodo.
using (SqlCeEngine engine = new SqlCeEngine("Data Source=test.sdf")) { // Ottimizzo lo spazio utilizzato dal DB engine.Shrink(); }
Si consiglia di eseguire queste operazioni in asincrono, mettendo in attesa l'utente, perché è richiesto l'accesso esclusivo al file.
Riferimenti utili
Dite addio ad Access con SQL Server Compact 4.0 (speciale)https://www.aspitalia.com/focuson/1207/Dite-Addio-Access-SQL-Server-Compact-4.0.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestione file Javascript in Blazor con .NET 9
Aggiornare a .NET 9 su Azure App Service
Fornire parametri ad un Web component HTML
Generare una User Delegation SAS in .NET per Azure Blob Storage
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Configurare automaticamente un webhook in Azure DevOps
Utilizzare DeepSeek R1 con Azure AI
Collegare applicazioni server e client con .NET Aspire
Creare una libreria CSS universale: Immagini
Il nuovo controllo Range di Blazor 9
Path addizionali per gli asset in ASP.NET Core MVC
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
I più letti di oggi
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- Gestione CSS in Blazor con .NET 9