Iniziamo subito con il dire che utilizzare Access con ASP.NET non è una cosa buona e giusta. Possono saltar fuori tanti problemi, le prestazioni sono quelle che sono e non si hanno tante belle cose che troviamo in SQL Server 2005.
Però è innegabile che a volte fa comodo. A volte fa comodo non dover installare nessun db engine. A volte, quando si hanno piccoli siti o piccole applicazioni web, Access compie egregiamente il suo compito.
Quello che mi chiedevo in questi giorni è: perchè non utilizzare SQL Server CE 2005 al posto di Access? Anche in questo caso non dovrei installare niente, è sufficiente copiare un unico file, come nel caso di Access. Quali possono essere i problemi e le limitazioni?
Utilizzare SQL CE 2005 nelle nostre applicazioni .NET è abbastanza banale. Possiamo infatti sfruttare il sistema a provider di ADO.NET anche con SQL CE 2005. In questo caso dobbiamo refenziare il giusto assembly, System.Data.SqlServerCe.dll, che ci viene installato con il piccolo pacchetto di installazione.
I problemi però iniziano fin da subito: appena si tenta di aprire una connessione salta fuori la seguente eccezione:
System.NotSupportedException: SQL Server Compact Edition is not intended for ASP.NET development.
Una veloce googlata fa saltar fuori tanti post che descrivono il problema e la sua risoluzione. Sostanzialmente è sufficiente aggiungere la seguente riga di codice
1 AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);
Quello che però non mi piace di tutto questo è proprio il fatto di utilizzare SQL Server CE 2005 in un ambito non previsto.
Comunque, continuando nell'utilizzo saltano fuori anche altri problemi derivanti da alcune limitazioni di SQL Server CE 2005. Ad esempio l'esecuzione di una query banale come SELECT TOP 10 FROM Tabella causa un errore in quanto lo statement TOP non è supportato.
Fortunatamente alcune di queste limitazioni saranno rimosse nella prossima versione, quella inclusa nel Framework 3.5. Alcune delle novità presenti saranno:
- SQL Server Compact Edition 3.5 Beta implements the timestamp (row version id) data type.
- SQL Server Compact Edition 3.5 BETA supports local transaction scope on a desktop and Tablet PC.
- SQL Server Compact Edition Table Designer in Visual Studio Code Name "Orcas" has been enhanced to provide a user interface for creating primary key and foreign key relationships between tables.
- SQL Server Compact Edition 3.5 Beta support for Transact-SQL statements has been extended as follows:
- Nested query in SELECT FROM clause
- CROSS APPLY and OUTER APPLY
- CAST
- TOP
- SQL Server Compact Edition 3.5 Beta supports data replication with SQL Server 2005 by using Microsoft Synchronization Services for ADO.NET. Microsoft Synchronization Services for ADO.NET is available for desktop and Tablet PCs only.
- SQL Server Compact Edition 3.5 Beta supports the ADO.NET Entity Framework. The support for ADO.NET Entity Framework is available for desktop and Tablet PCs only.
- SQL Server Compact Edition 3.5 Beta can be installed side-by-side with the previous version, SQL Server Compact Edition 3.1, on desktop and Tablet PC computers. Using SQL Server Compact Edition 3.5, you can open database files (*.sdf) created in SQL Server Compact Edition 3.1. Be aware that when a database file is opened in SQL Server Compact Edition 3.5, the file is updated to 3.5 and you will no longer be able to open the database by using SQL Server Compact Edition 3.1. Databases created by using SQL Server Compact Edition 3.5 cannot be opened by earlier versions of SQL Server Compact Edition.
In conclusione l'idea di sostituire Access con SQL CE 2005 al momento non mi sembra praticabile. Delle semplici prove hanno già evidenziato alcuni problemi e alcune limitazioni. Inoltre mi chiedo anche se utilizzare SQL CE 2005 nell'ambito web non possa causare problemi o side-effects particolari. Nel caso di ASP.NET, cosa succede se più utenti accedono contemporaneamente all'applicazione? Già come prassi sono abiutato a non lasciar mai aperta la connessione al db. E' sufficiente questo?
Qualcuno ha fatto test più approfonditi e mi sa dare delle dritte?