序列化数据导入mysql_对象序列化到数据库的例子.

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary;

using System.IO;

using System.Data;

using System.Data.SqlClient;

namespace SerializableTest

{

[Serializable]

public class Member{

public String name = null;

public int age = 0;

public int weight = 0;

}

class Program

{

static void Main(string[] args)

{

//SerializableObj();

//DeSerializableObj();

//TestSaveImageToDB();

//Member obj = new Member();

//obj.age = 20;

//obj.weight = 120;

//obj.name = "Jhon";

//SerializabeObjToDB(obj);

DeSerializabeObjToDB();

}

public static void TestSaveImageToDB()

{

string strFileName = @"E:\Documents and Settings\jhtest\My Documents\My Pictures\2.txt";

FileStream Pic = new FileStream(strFileName, FileMode.Open);//sFileName是图片路径

byte[] PicByte = new byte[Pic.Length];

Pic.Read(PicByte, 0, PicByte.Length);

SqlConnection con = new SqlConnection("Database=JDPlan;Server=jhtest2;uid=sa;Pwd=jhtest123;");

string cmdText = "insert into test(FileFormat,ImageFormat) values (@Image,@File)";

//string cmdText = "delete from test";

SqlCommand cmd = new SqlCommand(cmdText, con);

//二进制类型的值当然不能用字符串相加的形式传入,只能用添加参数的形式.

cmd.Parameters.Add("@Image", SqlDbType.Image,Convert.ToInt32(Pic.Length)).Value = PicByte;

cmd.Parameters.Add("@File", SqlDbType.Binary, Convert.ToInt32(Pic.Length)).Value = PicByte;

cmd.CommandType = CommandType.Text;

con.Open();

int returnValue = cmd.ExecuteNonQuery();

con.Close();

if (returnValue > 0)

{

Console.WriteLine("Insert Sucess!!!");

Console.ReadLine();

}

}

public static void SerializabeObjToDB(object obj)

{

MemoryStream ms = new MemoryStream();

ms = Serializable.SerializeBinary(obj);

Byte[] myData = new Byte[ms.Length];

ms.Position = 0;

ms.Read(myData, 0, Convert.ToInt32(ms.Length));

SqlConnection con = new SqlConnection("Database=JDPlan;Server=jhtest2;uid=sa;Pwd=jhtest123;");

string cmdText = "insert into test(FileFormat,ImageFormat) values (@Image,@File)";

SqlCommand cmd = new SqlCommand(cmdText, con);

//二进制类型的值当然不能用字符串相加的形式传入,只能用添加参数的形式.

cmd.Parameters.Add("@Image", SqlDbType.Image, Convert.ToInt32(myData.Length)).Value =myData;

cmd.Parameters.Add("@File", SqlDbType.Binary, Convert.ToInt32(myData.Length)).Value =myData;

cmd.CommandType = CommandType.Text;

con.Open();

int returnValue = cmd.ExecuteNonQuery();

con.Close();

if (returnValue > 0)

{

Console.WriteLine("Insert Sucess!!!");

Console.ReadLine();

}

}

public static void DeSerializabeObjToDB()

{

SqlConnection con = new SqlConnection("Database=JDPlan;Server=jhtest2;uid=sa;Pwd=jhtest123;");

string cmdText = "select top 1 FileFormat from test";

SqlCommand cmd = new SqlCommand(cmdText, con);

cmd.CommandType = CommandType.Text;

con.Open();

SqlDataReader dr = cmd.ExecuteReader();

byte[] myData = new byte[10000];

dr.Read();

myData = (byte[])dr.GetValue(0);

con.Close();

MemoryStream ms = new MemoryStream();

ms.Position = 0;

ms.Write(myData, 0, Convert.ToInt32(myData.Length));

Member obj=(Member)Serializable.DeSerializeBinary(ms);

Console.WriteLine("n1: {0}", obj.name);

Console.WriteLine("n2: {0}", obj.age);

Console.WriteLine("str: {0}", obj.weight);

Console.ReadLine();

}

public static void SerializableObj()

{

//下面是一段执行序列化简单的代码

Member obj = new Member();

obj.age = 20;

obj.weight = 120;

obj.name = "Jhon";

IFormatter formatter = new BinaryFormatter();

Stream stream = new FileStream("MyFile.bin",FileMode.Create,FileAccess.Write,FileShare.None);

formatter.Serialize(stream,obj);

stream.Close();

}

public static void DeSerializableObj()

{

//下面是从前面得到的文件的反序列化

IFormatter formatter = new BinaryFormatter();

Stream stream = new FileStream("MyFile.bin", FileMode.Open,FileAccess.Read, FileShare.Read);

Member obj = (Member)formatter.Deserialize(stream);

stream.Close();

// Here’s the proof

Console.WriteLine("n1: {0}", obj.name);

Console.WriteLine("n2: {0}", obj.age);

Console.WriteLine("str: {0}", obj.weight);

Console.ReadLine();

}

}

public class Serializable

{

#region Binary Serializers

public static System.IO.MemoryStream SerializeBinary(object request)

{

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer =

new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

System.IO.MemoryStream memStream = new System.IO.MemoryStream();

serializer.Serialize(memStream, request);

return memStream;

}

public static object DeSerializeBinary(System.IO.MemoryStream memStream)

{

memStream.Position = 0;

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer =

new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

object newobj = deserializer.Deserialize(memStream);

memStream.Close();

return newobj;

}

#endregion

//        #region XML Serializers

//        public static System.IO.MemoryStream SerializeSOAP(object request)

//        {

//            System.Runtime.Serialization.Formatters.Soap.SoapFormatter serializer =

//             new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();

//            System.IO.MemoryStream memStream = new System.IO.MemoryStream();

//            serializer.Serialize(memStream, request);

//            return memStream;

//        }

//        public static object DeSerializeSOAP(System.IO.MemoryStream memStream)

//        {

//            object sr;

//            System.Runtime.Serialization.Formatters.Soap.SoapFormatter deserializer =

//             new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();

//            memStream.Position = 0;

//            sr = deserializer.Deserialize(memStream);

//            memStream.Close();

//            return sr;

//        }

//        #endregion

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值