Nello script #564 abbiamo visto come si compatta un database Access con .NET sfruttando il late-binding di VB.NET prima e l'interop poi.
L'ultima possibilità da analizzare è l'utilizzo della reflection.
<%@ import namespace="System.Reflection" %> <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"); Type t=Type.GetTypeFromProgID("jro.JetEngine"); Object obj = Activator.CreateInstance(t); object[] dati={strConn,strConnTo}; t.InvokeMember("CompactDatabase",BindingFlags.InvokeMethod, null,obj,dati); } </SCRIPT> Naturalmente è inutile compattare un database in un secondo file. Di seguito c'è quindi l'ultimo esempio, con l'aggiunta della copia del file compattato sull'originale: <%@ import namespace="System.Reflection" %> <SCRIPT runat="server" language="c#"> void Page_Load(object sender, System.EventArgs e) { try { string db="db1.mdb"; // db1.mdb è il database da compattare string database, database2; database = Request.MapPath(db); database2 = database+"_copy"; if (File.Exists(database2)) File.Delete(database2); string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + database; string strConnTo = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + database2; Type t=Type.GetTypeFromProgID("jro.JetEngine"); Object obj = Activator.CreateInstance(t); object[] dati={strConn,strConnTo}; t.InvokeMember("CompactDatabase",BindingFlags.InvokeMethod, null,obj,dati); // Copio il nuovo file compresso sul precedente File.Copy(database2,database,true); File.Delete(database2); Response.Write ("ok"); } catch (Exception ex) { Response.Write("Errore: "+ex.Message); } } </SCRIPT>
Approfondimenti
Compattare un database Access con JRO e .NET
https://www.aspitalia.com/liste/usag/script.aspx?ID=564
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.