将对象存储到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]