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.