蓝狐的技术思考 BlueFox Thinking in Tech...
交流,分享,探讨技术...... Communication, Sharing, and Discussion about Technology.....

导航

 

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

    }
}

posted on 2007-01-25 15:38  蓝狐  阅读(826)  评论(0编辑  收藏  举报