站长论坛

标题: ASP.NET将物件序列化成Binary储存至DB or File [打印本页]

作者: superadmin    时间: 2008-7-13 13:53
标题: ASP.NET将物件序列化成Binary储存至DB or File
最近有人在讨论这个问题..小弟很少玩这个东西..就到网路上找了一些资源..教大家如何将物件序列化成Binary Data..然后储存到资料库或档桉裡..
当然可以序列化..就一定可以反序列化了...其实序列化格式不一定要是Binary Data..也可以是XML or SOAP Data的...

首先准备一个DB,结构如下:



接下来就是代码了

以下为引用的内容:

asp.net(c#)

SerializingObjects.aspx

view plaincopy to clipboardprint?
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SerializingObjects.aspx.cs" Inherits="SerializingObjects" %>  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  
<html xmlns="http://www.w3.org/1999/xhtml" >  
<head runat="server">  
    <title>Serializing Objects</title>  
</head>  
<body>  
    <form id="form1" runat="server">  
    <div>  
        <asp:DropDownList ID="ddlType" runat="server">  
            <asp:ListItem Value="0">资料库</asp:ListItem>  
            <asp:ListItem Value="1">档桉</asp:ListItem>  
        </asp:DropDownList>  
        <asp:Button ID="btnLoad" runat="server" OnClick="btnLoad_Click" Text="读取" />  
  
        <asp:Label ID="Label1" runat="server" Text="编号:"></asp:Label>  
        <asp:TextBox ID="txbId" runat="server"></asp:TextBox>  
         
  
        <asp:Label ID="Label2" runat="server" Text="名称:"></asp:Label>  
        <asp:TextBox ID="txbName" runat="server"></asp:TextBox>  
         
  
        <asp:Label ID="Label3" runat="server" Text="电话:"></asp:Label>  
        <asp:TextBox ID="txbTel" runat="server"></asp:TextBox>  
  
        <asp:Label ID="Label4" runat="server" Text="地址:"></asp:Label>  
        <asp:TextBox ID="txbAddress" runat="server"></asp:TextBox>  
        <asp:Button ID="btnAdd" runat="server" OnClick="btnAdd_Click" Text="新增" /></div>  
    </form>  
</body>  
</html>  
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SerializingObjects.aspx.cs" Inherits="SerializingObjects" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Serializing Objects</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="ddlType" runat="server">
            <asp:ListItem Value="0">资料库</asp:ListItem>
            <asp:ListItem Value="1">档桉</asp:ListItem>
        </asp:DropDownList>
        <asp:Button ID="btnLoad" runat="server" OnClick="btnLoad_Click" Text="读取" /><br />
        <asp:Label ID="Label1" runat="server" Text="编号:"></asp:Label>
        <asp:TextBox ID="txbId" runat="server"></asp:TextBox>
        <br />
        <asp:Label ID="Label2" runat="server" Text="名称:"></asp:Label>
        <asp:TextBox ID="txbName" runat="server"></asp:TextBox>
        <br />
        <asp:Label ID="Label3" runat="server" Text="电话:"></asp:Label>
        <asp:TextBox ID="txbTel" runat="server"></asp:TextBox><br />
        <asp:Label ID="Label4" runat="server" Text="地址:"></asp:Label>
        <asp:TextBox ID="txbAddress" runat="server"></asp:TextBox>
        <asp:Button ID="btnAdd" runat="server" OnClick="btnAdd_Click" Text="新增" /></div>
    </form>
</body>
</html>

SerializingObjects.aspx.cs

view plaincopy to clipboardprint?
using System;   
using System.Data;   
using System.Configuration;   
using System.Collections;   
using System.Web;   
using System.Web.Security;   
using System.Web.UI;   
using System.Web.UI.WebControls;   
using System.Web.UI.WebControls.WebParts;   
using System.Web.UI.HtmlControls;   
using System.Data.SqlClient;   
using System.IO;   
using System.Runtime.Serialization.Formatters.Binary;   
  
public partial class SerializingObjects : System.Web.UI.Page   
{   
    protected void Page_Load(object sender, EventArgs e)   
    {   
  
    }   
    protected void btnAdd_Click(object sender, EventArgs e)   
    {   
        if (this.ddlType.SelectedIndex == 0)   
        {   
            SaveToDB();   
        }   
        else  
        {   
            SaveToFile();   
        }   
    }   
  
    //存至资料库(Binary Serialization)   
    protected void SaveToDB()   
    {   
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))   
        {   
            using (MemoryStream ms = new MemoryStream())   
            {   
                conn.Open();   
  
                Member mem = new Member();   
                mem.Id = this.txbId.Text;   
                mem.Name = this.txbName.Text;   
                mem.Tel = this.txbTel.Text;   
                mem.Address = this.txbAddress.Text;   
  
                BinaryFormatter b = new BinaryFormatter();   
                b.Serialize(ms, mem);   
                ms.Seek(0, 0);   
  
                string sql = "insert into member values(@data)";   
                SqlCommand cmd = new SqlCommand(sql, conn);   
                cmd.Parameters.Add("@data", SqlDbType.Binary).Value = ms.ToArray();   
                cmd.ExecuteNonQuery();   
  
            }   
        }   
    }   
  
    //由资料库读取(Binary Serialization)   
    protected void LoadFromDB()   
    {   
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))   
        {   
            using (MemoryStream ms = new MemoryStream())   
            {   
                conn.Open();   
  
                string sql = "select data from member";   
                SqlCommand cmd = new SqlCommand(sql, conn);   
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);   
                DataTable dt = new DataTable();   
                adapter.Fill(dt);   
  
                if (dt.Rows.Count > 0)   
                {   
                    byte[] buffer = (byte[])dt.Rows[dt.Rows.Count-1][0];   
                    ms.Write(buffer, 0, buffer.Length);   
                    ms.Seek(0, 0);   
                    BinaryFormatter b = new BinaryFormatter();   
                    Member mem = new Member();   
                    mem = (Member)b.Deserialize(ms);   
  
                    this.txbId.Text = mem.Id;   
                    this.txbName.Text = mem.Name;   
                    this.txbTel.Text = mem.Tel;   
                    this.txbAddress.Text = mem.Address;   
                }   
            }   
        }   
    }   
  
    //存至档桉(Binary Serialization)   
    protected void SaveToFile()   
    {   
        string path = Server.MapPath("member.dat");   
        using (Stream s = File.Open(path, FileMode.Create))   
        {   
            Member mem = new Member();   
            mem.Id = this.txbId.Text;   
            mem.Name = this.txbName.Text;   
            mem.Tel = this.txbTel.Text;   
            mem.Address = this.txbAddress.Text;   
  
            BinaryFormatter b = new BinaryFormatter();   
            b.Serialize(s, mem);   
        }   
    }   
  
    //由档桉读取(Binary Serialization)   
    protected void LoadFromFile()   
    {   
        string path = Server.MapPath("member.dat");   
        if (File.Exists(path))   
        {   
            using (Stream s = File.Open(path, FileMode.Open))   
            {   
                BinaryFormatter b = new BinaryFormatter();   
                Member mem = new Member();   
                mem = (Member)b.Deserialize(s);   
  
                this.txbId.Text = mem.Id;   
                this.txbName.Text = mem.Name;   
                this.txbTel.Text = mem.Tel;   
                this.txbAddress.Text = mem.Address;   
            }   
        }   
    }   
  
    protected void btnLoad_Click(object sender, EventArgs e)   
    {   
        if (this.ddlType.SelectedIndex == 0)   
        {   
            LoadFromDB();   
        }   
        else  
        {   
            LoadFromFile();   
        }   
    }   
}   
  
  
[Serializable]   
public class Member   
{   
    private string _id = string.Empty;   
    private string _name = string.Empty;   
    private string _tel = string.Empty;   
    private string _address = string.Empty;   
  
    public Member()   
    {   
  
    }   
  
    public Member(string id, string name,string tel,string address)   
    {   
        _id = id;   
        _name = name;   
        _tel = tel;   
        _address = address;   
    }   
  
    public string Id   
    {   
        get { return _id; }   
        set { _id = value; }   
    }   
  
    public string Name   
    {   
        get { return _name; }   
        set { _name = value; }   
    }   
  
    public string Tel   
    {   
        get { return _tel; }   
        set { _tel = value; }   
    }   
  
    public string Address   
    {   
        get { return _address; }   
        set { _address = value; }   
    }   
  
}  
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public partial class SerializingObjects : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        if (this.ddlType.SelectedIndex == 0)
        {
            SaveToDB();
        }
        else
        {
            SaveToFile();
        }
    }

    //存至资料库(Binary Serialization)
    protected void SaveToDB()
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {
            using (MemoryStream ms = new MemoryStream())
            {
                conn.Open();

                Member mem = new Member();
                mem.Id = this.txbId.Text;
                mem.Name = this.txbName.Text;
                mem.Tel = this.txbTel.Text;
                mem.Address = this.txbAddress.Text;

                BinaryFormatter b = new BinaryFormatter();
                b.Serialize(ms, mem);
                ms.Seek(0, 0);

                string sql = "insert into member values(@data)";
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.Add("@data", SqlDbType.Binary).Value = ms.ToArray();
                cmd.ExecuteNonQuery();

            }
        }
    }

    //由资料库读取(Binary Serialization)
    protected void LoadFromDB()
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {
            using (MemoryStream ms = new MemoryStream())
            {
                conn.Open();

                string sql = "select data from member";
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                adapter.Fill(dt);

                if (dt.Rows.Count > 0)
                {
                    byte[] buffer = (byte[])dt.Rows[dt.Rows.Count-1][0];
                    ms.Write(buffer, 0, buffer.Length);
                    ms.Seek(0, 0);
                    BinaryFormatter b = new BinaryFormatter();
                    Member mem = new Member();
                    mem = (Member)b.Deserialize(ms);

                    this.txbId.Text = mem.Id;
                    this.txbName.Text = mem.Name;
                    this.txbTel.Text = mem.Tel;
                    this.txbAddress.Text = mem.Address;
                }
            }
        }
    }

    //存至档桉(Binary Serialization)
    protected void SaveToFile()
    {
        string path = Server.MapPath("member.dat");
        using (Stream s = File.Open(path, FileMode.Create))
        {
            Member mem = new Member();
            mem.Id = this.txbId.Text;
            mem.Name = this.txbName.Text;
            mem.Tel = this.txbTel.Text;
            mem.Address = this.txbAddress.Text;

            BinaryFormatter b = new BinaryFormatter();
            b.Serialize(s, mem);
        }
    }

    //由档桉读取(Binary Serialization)
    protected void LoadFromFile()
    {
        string path = Server.MapPath("member.dat");
        if (File.Exists(path))
        {
            using (Stream s = File.Open(path, FileMode.Open))
            {
                BinaryFormatter b = new BinaryFormatter();
                Member mem = new Member();
                mem = (Member)b.Deserialize(s);

                this.txbId.Text = mem.Id;
                this.txbName.Text = mem.Name;
                this.txbTel.Text = mem.Tel;
                this.txbAddress.Text = mem.Address;
            }
        }
    }

    protected void btnLoad_Click(object sender, EventArgs e)
    {
        if (this.ddlType.SelectedIndex == 0)
        {
            LoadFromDB();
        }
        else
        {
            LoadFromFile();
        }
    }
}


[Serializable]
public class Member
{
    private string _id = string.Empty;
    private string _name = string.Empty;
    private string _tel = string.Empty;
    private string _address = string.Empty;

    public Member()
    {

    }

    public Member(string id, string name,string tel,string address)
    {
        _id = id;
        _name = name;
        _tel = tel;
        _address = address;
    }

    public string Id
    {
        get { return _id; }
        set { _id = value; }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public string Tel
    {
        get { return _tel; }
        set { _tel = value; }
    }

    public string Address
    {
        get { return _address; }
        set { _address = value; }
    }

}



执行结果:







欢迎光临 站长论坛 (http://tzlink.com/bbs/) Powered by Discuz! X3.2