Compattare un database Access con JRO e .NET
Nello script #58 e #196 sono presenti delle tecniche per compattare - liberando in questo modo spazio inutilizzato - un database in formato Access.
E' possibile utilizzare questa tecnica anche con la tecnologia .NET.
Inizialmente sarà esposto un esempio in VB.NET, linguaggio che, a differenza del C#, permette l'esecuzione late-binding:
<SCRIPT runat="server" language="vb"> sub Page_Load() dim db as string="db1.mdb" ' db1.mdb è il database da compattare Dim database, database2 As String database = Request.MapPath(db) database2 = Request.MapPath("db2.mdb") ' db2 è il database compattato Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & database Dim strConnTo As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & database2 Dim objJro As Object = Server.CreateObject("jro.JetEngine") objJro.CompactDatabase(strConn,strConnTo) objJro = Nothing end sub </SCRIPT>
Se si osserva questo codice si noterà che non differenzia da quello per Classi ASP grazie alla possibilità di VB.NET di richiamare funzioni in late-binding.
In C# - o attivando "strict on" in VB.NET - tale codice non sarà più utilizzabile e dovremo usare altre strade.
Se utilizziamo VS.NET possiamo risolvere il tutto con pochi click del mouse. Nel solution Explorer selezione References, quindi "Add References", selezioniamo il tab COM e poi "Microsoft Jet and Replication Ojects 2.x Library" per generare il wrapper di questa classe.
Ora sarà possibile utilizzare quell'oggetto COM, con la funzione "CompactDatabase", all'interno delle pagine C#:
<SCRIPT runat="server" language="c#"> void Page_Load() { string db="db1.mdb"; // db1.mdb è il database da compattare string database, database2 database = Request.MapPath(db1); database2 = Request.MapPath("db2.mdb"); JRO.JetEngineClass jro = new JRO.JetEngineClass(); jro.CompactDatabase(database,database2); } </SCRIPT>
In alternativa a Visual Studio .NET, possiamo utilizzare il comando tlbimp.exe dalla console per creare il wrapper.
Prossimamente vedremo come fare lo stesso sfruttando la reflection.







