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
}
}