zoukankan      html  css  js  c++  java
  • 对象序列化到数据库的例子.

    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

        }
    }

  • 相关阅读:
    加入页面切换动画, 避免冷启动
    Spark Shuffle模块——Suffle Read过程分析
    java使用线程请求訪问每次间隔10分钟连续5次,之后停止请求
    二叉排序树(BST)构造与应用
    L贪心基础
    leetcode笔记:Ugly Number II
    Android API Guides---Layouts
    红外目标图像中阈值切割方法的比較与研究
    IOS开发证书变成“此证书的签发者无效”解决方法
    Web前端开发规范收集
  • 原文地址:https://www.cnblogs.com/newwind521/p/630332.html
Copyright © 2011-2022 走看看