序列化ADODataSet, ADOQuery
经过昨天晚上一折腾把做了一个DIOCP直接传递TADOQuery的Demo,在google上找了一系列的资料。
这样服务端可以直接将TADOQuery查询出来的数据直接转换成TStream自己进行传递,到客户端用一个TADOQuery对象还原流就可以了。
两种方法导出的数据格式是 一样的
方法一<转载>
是将recordset保存成流接口->转成OleVariant ->写入流
class function TADOTools.saveToStream2(
pvDataSet: TCustomADODataSet): TMemoryStream;
var
AStream:_Stream;
V:OLEVariant;
P:Pointer;
begin
AStream:=CoStream.Create;
OLEVariant(pvDataSet.Recordset).Save(AStream, adPersistADTG);
AStream.Position:=;
V:=AStream.Read(AStream.Size);
result:=TMemoryStream.Create;
try
P:=VarArrayLock(V);
try
result.Size:=VarArrayHighBound(V,)+;
Move(P^,result.Memory^, result.Size);
finally
VarArrayUnLock(V);
end;
except
result.Free();
result := nil;
raise;
end;
end;
class procedure TADOTools.loadFromStream2(pvDataSet: TCustomADODataSet;
pvStream: TMemoryStream);
var
V:OLEVariant;
AR:_Recordset;
AStream:_Stream;
P:Pointer;
begin
pvStream.Position:=;
OLEVariant(pvDataSet.Recordset).Open(TStreamAdapter.Create(pvStream) as IUnknown, adPersistADTG); AR.Open(AStream, EmptyParam,adOpenUnspecified, adLockUnspecified, -);
pvDataSet.Recordset:=ADOInt._Recordset(AR); V:=VarArrayCreate([,pvStream.Size-], varByte);
P:=VarArrayLock(V);
try
Move(pvStream.Memory^, P^, pvStream.Size);
finally
VarArrayUnLock(V);
end; AStream:=CoStream.Create;
AStream.Open(EmptyParam,adModeUnknown,adOpenStreamUnspecified,'','');
AStream.Type_:=adTypeBinary;
AStream.Write(V); AR:=_Recordset(CoRecordset.Create);
AStream.Position:=;
AR.Open(AStream,EmptyParam,adOpenUnspecified, adLockUnspecified, -);
pvDataSet.Recordset:=ADOInt._Recordset(AR); end;
今天稍微改造了下变得简单了
直接调用recordset保存成流借用TStreamAdapter
class procedure TADOTools.saveToStream(pvDataSet: TCustomADODataSet; pvStream:TStream);
begin
OLEVariant(pvDataSet.Recordset).Save(TStreamAdapter.Create(pvStream) as IUnknown,
adPersistADTG); //adPersistXML
end; class procedure TADOTools.loadFromStream(pvDataSet: TCustomADODataSet;
pvStream: TStream);
var
AR:_Recordset;
begin
AR:=_Recordset(CoRecordset.Create);
pvStream.Position:=;
AR.Open(TStreamAdapter.Create(pvStream) as IUnknown, EmptyParam,adOpenUnspecified, adLockUnspecified, -);
pvDataSet.Recordset:=ADOInt._Recordset(AR);
end;
序列化ADODataSet, ADOQuery的更多相关文章
- ADODataSet与ADOQuery的区别
ADODataSet组件 此组件功能是非常强大的,通过ADODataset,可以直接与一个表进行联接,也可以执行SQL语句,还可以执行存储过程,可以说集ADOTable. ADOQuery. A ...
- 【.net 深呼吸】序列化中的“引用保留”
假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...
- 【.net 深呼吸】设置序列化中的最大数据量
欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...
- 用dubbo时遇到的一个序列化的坑
首先,这是标题党,问题并不是出现在序列化上,这是报错的一部分: Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to s ...
- Unity 序列化
Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...
- Unity 序列化 总结
查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...
- [C#] C# 知识回顾 - 序列化
C# 知识回顾 - 序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...
- Newtonsoft.Json设置类的属性不序列化
参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
随机推荐
- 【TP3.2】模板 select选项采坑
1.TP3.2 模板 select 下拉框采坑 <div class="form-item"> <label class="item-label&quo ...
- tomcat启动dubbo报IO异常
严重: Servlet [springDispatcher] in web application [/dubbo-service] threw load() exception java.io.IO ...
- sqlserver几个好用的表值函数和标量函数
获取逗号风格的字符串中的某一个 比如'1,2,4,5,6' 第三个就是4 CREATE function [dbo].[Get_StrArrayStrOfIndex] ( @str nvarchar( ...
- NoSQL生态系统(nosql ecosystem)
Unlike most of the other projects in this book, NoSQL is not a tool, but an ecosystem composed of se ...
- 表的复制——sql语句
SQL Server 复制表结构及数据到新表 select * into 目标表名 from 源表名(要求目标表不存在,因为在插入时会自动创建) 只复制表结构到新表 CREATE TABLE 新表 S ...
- 整理打印PI值
准备锻炼背诵PI的小数,找到PI值: PI=3. 141592653589793238462643383279502884197169399375105820974944592307816406286 ...
- hadoop执行wordcount例子
1:下载hadoop.http://mirror.esocc.com/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz 2:解压. tar - ...
- MVC摘记
2013年9月23日18:04:06 直接cshtml页面的js中使用 var customerId = @(ViewBag.Oppotunity as OppotunityDto==null ...
- ORA-65179: cannot keep datafiles for a pluggable database that is not unplugged
SQL> drop pluggable database pdb2; drop pluggable database pdb2 * ERROR at line : ORA-: cannot ke ...
- iOS Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to
刚接触iOS,依照教程操作执行出现错误 Terminating app due to uncaught exception 'NSInternalInconsistencyException', re ...