1

I want save and retrieve an object from a database. I write C# code to save it as below, and it worked fine. Now I can save an object into the database.

ReportObject ro = new ReportObject()
{
    Name = ctrl.Name,
    BackColor = ctrl.BackColor,
    ForeColor = ctrl.BackColor,
    Fonts = ctrl.Font,
    TypeofControl = ctrl.GetType()
};

MemoryStream memStream = new MemoryStream();
StreamWriter sw = new StreamWriter(memStream);

sw.Write(ro);

string sql = "INSERT INTO [TemplateDetails] ([Object]) VALUES (@Object)";

SqlCommand cmd = new SqlCommand(sql, con, tran);
cmd.Parameters.Add("@Object", SqlDbType.VarBinary, Int32.MaxValue);
cmd.Parameters["@Object"].Value = memStream.GetBuffer();

cmd.ExecuteNonQuery();

I am already saved a C# object ReportObject in SQL Server database. I want to retrieve it back to a C# object.

string sql = "SELECT [Object] FROM [TemplateDetails]"

SqlDataReader dr = db.Reader(sql);

if (dr.Read())
{
byte[] arrays = (byte[])dr["Object"];
}
Manu Varghese
  • 791
  • 8
  • 25
  • Use binary serialization instead. –  Nov 29 '17 at 05:13
  • `StreamWriter.Write(Object)` calls the object's `ToString()` method. Did you override it to return more than just the type name? –  Nov 29 '17 at 05:16
  • @Amy No, I didn't override ToString() – Manu Varghese Nov 29 '17 at 05:20
  • 2
    Then you aren't writing anything useful to your table. –  Nov 29 '17 at 05:21
  • See this [post](https://stackoverflow.com/questions/4736155/how-do-i-convert-byte-to-stream-in-c). – MUT Nov 29 '17 at 05:21
  • @Amy thanks , I Solved problem myself. first Serialize to a byte array and save in database.after retrieving from the database as a byte array. Deserialize and convert to object. and it's worked fine. see the detail code in answer session. thanks. to find out my problems – Manu Varghese Nov 29 '17 at 05:53

1 Answers1

1

I Solved problem myself. first Serialize to a byte array and save in database.

enter  ReportObject ro = new ReportObject()
     {
       Name = ctrl.Name,
       BackColor = ctrl.BackColor,
       ForeColor = ctrl.BackColor,
       Fonts = ctrl.Font,
       TypeofControl = ctrl.GetType()
     };

     MemoryStream memorystream = new MemoryStream();
     BinaryFormatter bf = new BinaryFormatter();
     bf.Serialize(memorystream, ro);
    byte[] yourBytesToDb = memorystream.ToArray();

after retrieving from the database as a byte array. Deserialize and convert to object.

MemoryStream memorystreamd = new MemoryStream(arrBytes);
BinaryFormatter bfd = new BinaryFormatter();
ReportObject deserializedReportObject = bfd.Deserialize(memorystreamd) as ReportObject;
Manu Varghese
  • 791
  • 8
  • 25