ADO Recordset数据集序列化
来源:互联网 发布:com域名实名认证 编辑:程序博客网 时间:2024/05/14 19:19
由于工作需要,使用ADO查询数据库,然后后把查询记录序列化到内存病通过网络传输到另外机器以便反序列化为Recordset。
起先,使用MS提供的方式,需要IpersistStream、IStream、OleSaveToStream、OleLoadFromStream详情请看这里。嗯,很好,MS给出的例子很完美的测试通过~
天有不测风云人有旦夕祸福,由于业务需要,必须在查询语句使用绑定变量的方式来查询数据库,而不是组合查询SQL语句。这种方式的好处是,见这里。由于这种需求,就必须使用
心有不甘,就不停的调试(边调边试),不停的google
现在需要考虑下如果跨平台,如何解决数据集的序列化,采用什么方式好呢?这是一个值得考虑的问题!
起先,使用MS提供的方式,需要IpersistStream、IStream、OleSaveToStream、OleLoadFromStream详情请看这里。嗯,很好,MS给出的例子很完美的测试通过~
天有不测风云人有旦夕祸福,由于业务需要,必须在查询语句使用绑定变量的方式来查询数据库,而不是组合查询SQL语句。这种方式的好处是,见这里。由于这种需求,就必须使用
Command对象了(Command对象才有参数绑定功能)。示例见这里
然而,Command对象执行Execute方法后,返回结果Recordset不能进行序列化了,此时的Recordset对象是只读的,并不能修改其中属性。因此,在调用OleSaveToStream时返回错误("查询不支持接口”),呵呵,够诡异吧!!这位老兄和我经历的一模一样,猛击这里
心有不甘,就不停的调试(边调边试),不停的google
终于,终于被我发现了解决方案。由于Recordset支持从Command来Open,而Command是绑定变量的唯一途径,所以咯,结合Recorset的Open方法,终于把问题解决了,下面给出解决代码
_CommandPtr cmd;cmd.CreateInstance("ADODB.Command"); cmd->ActiveConnection=pNode->pCn;cmd->CommandType=adCmdText;cmd->CommandText=vsSQLText;CStrArrayEX sPara;sPara.SplitWord(vsParaList,"\n");// CreateParameter Append...//Append(cmd->CreateParameter("",adDouble,adParamInput,20,(_variant_t)&sPara.GetWord(i)[1])); _variant_t affect;//_RecordsetPtr pRS = cmd->Execute(&affect, 0, adCmdText);_RecordsetPtr pRS;pRS.CreateInstance(__uuidof(Recordset));pRS->CursorLocation = adUseClient;pRS->CursorType = adOpenDynamic;pRS->LockType = adLockBatchOptimistic;pRS->Open((IDispatch*)cmd, vtMissing, adOpenStatic,adLockBatchOptimistic, -1); IStreamPtr stream;stream.CreateInstance(__uuidof(IStream));std::vector<char> buf;if( SaveRS(pRS, &stream) == S_OK &&StreamToMem(stream, buf) )
现在需要考虑下如果跨平台,如何解决数据集的序列化,采用什么方式好呢?这是一个值得考虑的问题!
- ADO Recordset数据集序列化
- ado.RecordSet
- 运行时怎样把数据报表(datareport)绑定到一个ADO记录集(recordset)中
- ADO中记录集recordSet的使用
- RecordSet数据集获取心得
- ADO.Recordset对象方法
- ADO Recordset to SQLite
- ADO Recordset 对象
- ADO Recordset Open
- Recordset 对象 (ADO)
- ADO Recordset addnew
- ADO Recordset 对象
- ADO Recordset 对象
- ADO Recordset 持久化 格式 XML 读取 保存
- RecordSet数据集各种操作方法及属性
- 补充些ADO Recordset知识
- ADO recordset open方法解析
- 在ado.net中使用ado recordset
- 双击文字后实现编辑文本功能
- 软件开发网站
- 2、通过helloworld来认识下backbone
- 动态三维数组分配:
- Android 三言两语
- ADO Recordset数据集序列化
- ASP.NET Session的七点认识
- Linux驱动程序开发007 - 设备驱动模型初探
- maxActive、maxIdle和maxWait参数
- 使用cppcheck检查代码
- Connection authorization failure occurred. Reason: Local security service non-retryable error解决方案
- Servlet基础
- Java 基本类型
- 模块替换方式实现添加系统调用