david050930 发表于 2013-7-11 11:18:05

将对象存储到blob字段中

本帖最后由 david050930 于 2013-7-11 11:23 编辑

最近一直在研究使用C#开发程序来接收邮件,分析mime模式的邮件觉得该类中的属性非常之多,且不一定有多少个,因此想直接把mail对象直接存到数据库中,主题、时间、内容等可以提取出来另存,方便查询。
现将保存过程的代码拿出来与大家分享,可能有些朋友水平高,不屑来看,没关系,只要不攻击我就行,欢迎拍砖,省得大家到别处去查了。或者大家有更好的接收邮件方案或方法可与我讨论,我也想多学习一下。
我最近也在看dev的那个mailClient,真把我看晕了,谁有那个项目带中文注释的能提供一份给我吗?先谢谢了
如下:
            table1是我测试建的表,内有字段c1、c2、c3、c4字段c4数据类型是blob的。
            MemoryStream ms = new MemoryStream();//定义内存流对象,用来存放DataTable序列化后的值
            try
            {
                OraHelper orahelper = new OraHelper();
                DataTable dt = orahelper.RunQuerySql("select * from table1 where c1=1", "table1");
                byte[] bArrayResult = null; //用于存放序列化后的数据
                dt.RemotingFormat = SerializationFormat.Binary; //指定DataTable串行化格式是二进制
                IFormatter IF = new BinaryFormatter();//产生二进制序列化格式
                IF.Serialize(ms, dt);//串行化到内存中
                bArrayResult = ms.ToArray(); // 将DataTable转化成byte[]
                OracleParameter[] paras = { new OracleParameter(":C4", OracleType.Blob,bArrayResult.Length) };
                paras.Value = bArrayResult;
                orahelper.ExecuteSql("update table1 set C4 = :C4 where c1=2", paras);
               
                byte[] bt = (byte[])orahelper.RunQuerySql("select c4 from table1 where c1=2","table1").Rows.ItemArray;
                MemoryStream mss = new MemoryStream(bt,0,bt.Length);
                DataTable dtrtn = (DataTable)IF.Deserialize(mss);
               
            }
            catch (IOException ie)
            {
                throw new Exception(ie.ToString());
            }
            finally
            {
                ms.Close();
                ms.Dispose();
            }

页: [1]
查看完整版本: 将对象存储到blob字段中