简体   繁体   English

从保存在SQL Server数据库中的二进制文件中检索C#对象

[英]Retrieve C# object from binary that saved in SQL Server database

I want save and retrieve an object from a database. 我想保存并从数据库中检索对象。 I write C# code to save it as below, and it worked fine. 我编写C#代码将其保存如下,并且工作正常。 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. 我已经在SQL Server数据库中保存了一个C#对象ReportObject I want to retrieve it back to a C# object. 我想将其检索回C#对象。

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

SqlDataReader dr = db.Reader(sql);

if (dr.Read())
{
byte[] arrays = (byte[])dr["Object"];
}

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM