Serializzare in binario su database una classe .NET

di Andrea Zani, in UserScript, ASP.NET, C#,

Nello script #523 si è visto come serializzare una classe in formato XML per poterla memorizzare in un file su disco. In questo script vedremo come, invece, serializzare una classe in formato binario in una tabella di un nostro database.
E' sufficiente creare una tabella con un campo di tipo "Blob" o "Oggetto Ole". Quindi per l'inserimento della stessa classe dello script #523 dovremo utilizzare questo codice:

private void ButtonSace_Click(object sender, System.EventArgs e)
{
  try
  {
    SampleClass sc = new SampleClass();
    sc.Description = description.Text;
    sc.Date = DateTime.Now;


    MemoryStream ms=new MemoryStream();
    BinaryFormatter bf=new BinaryFormatter();
    bf.Serialize(ms,sc);
    ms.Seek(0,0);
    byte[] FileByteArray= new byte[ms.Length];
    ms.Read(FileByteArray,0,(int)ms.Length);

    // Accesso al database
    using (OleDbConnection myconnection=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Request.MapPath("database.mdb")))
    {
      string strsql="insert into Test(content) values(?)";
      OleDbCommand mycommand = new OleDbCommand(strsql,myconnection);
      mycommand.Parameters.Add("@content",OleDbType.Binary,(int)ms.Length).Value=FileByteArray;
      myconnection.Open();
      mycommand.ExecuteNonQuery();
    }
    Response.Write ("Classe memorizzata!");
  }
  catch (Exception ex)
  {
    Response.Write ("Errore: "+ex.Message);
  }
}

Per recuperare la classe invece si dovrà usare questo script:

private void ButtonLoad_Click(object sender, System.EventArgs e)
{
  string strsql="Select content from Test";
  using (OleDbConnection myconnection=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Request.MapPath(db)))
  {
    myconnection.Open();
    OleDbCommand mycommand = new OleDbCommand(strsql,myconnection);
    OleDbDataReader re=mycommand.ExecuteReader(CommandBehavior.CloseConnection);

    BinaryFormatter bf=new BinaryFormatter();
    SampleClass sc = null;

    if (re.Read()) 
    {
      sc=(SampleClass)bf.Deserialize(new MemoryStream((byte[])re["content"]));
      Response.Write("Tutto ok!");
    } 
    else
      Response.Write("Non ho trovato nulla!");
  }
}

Per maggiori informazioni si veda:
#523 - Salvare una classe .NET su file con la serializzazione
https://www.aspitalia.com/liste/usag/script.aspx?ID=523

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi