ado數據集對象流化與對象還原
通過網絡傳輸對象之前,必須要對對象進行串行化(流化)處理,然後發送串行化的流。當接收方根據接收到的流還原對象出來。
function RecordsetToXML(const Recordset: _Recordset): string;
var
RS: Variant;
Stream: TStringStream;
begin
Result := '';
if Recordset = nil then Exit;
Stream := TStringStream.Create('');
try
RS := Recordset;
RS.Save(TStreamAdapter.Create(stream) as IUnknown, adPersistADTG);
Stream.Position := 0;
Result := Stream.DataString;
finally
Stream.Free;
end;
end;
function RecordsetFromXML(const XML: string): _Recordset;
var
RS: Variant;
Stream: TStringStream;
begin
Result := nil;
if XML = '' then Exit;
try
Stream := TStringStream.Create(XML);
Stream.Position := 0;
RS := CreateOleObject('ADODB.Recordset');
RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
Result := IUnknown(RS) as _Recordset;
finally
Stream.Free;
end;
end;
將對象串行化(流化)處理後,必須調用StrToHex()方法格式化字符串,然後進行加密、發送。。。。。。
function
TransChar(AChar: Char): Integer;
begin
if
AChar
in
['0'..'9']
then
Result := Ord(AChar) - Ord('0')
else
Result := 10 + Ord(AChar) - Ord('A');
end
;
function
StrToHex(AStr:
string
):
string
;
var
I ,Len: Integer;
s:char;
begin
len:=length(AStr);
Result:='';
for
i:=1
to
len
do
begin
s:=AStr[i];
Result:=Result +' '+IntToHex(Ord(s),2);
//
将字符串转化为16进制字符串,
//
并以空格间隔。
end
;
Delete(Result,1,1);
//
删去字符串中第一个空格
end
;
function
HexToStr(AStr:
string
):
string
;
var
I,len : Integer;
CharValue: Word;
Tmp:
string
;
s:char;
begin
Tmp:='';
len:=length(Astr);
for
i:=1
to
len
do
begin
s:=Astr[i];
if
s <> ' '
then
Tmp:=Tmp+
string
(s);
end
;
Result := '';
For
I := 1
to
Trunc(Length(Tmp)
/2) do
begin
Result := Result + ' ';
CharValue := TransChar(Tmp[2*I-1])*16 + TransChar(Tmp[2*I]);
if
(charvalue < 32)
or
(charvalue > 126)
then
Result[I] := '.'
//
非可见字符填充
else
Result[I] := Char(CharValue);
end
;
end
;
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/archive/2009/10/19/2940751.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?