如何从COM返回断开的ADO记录集

分享于 

5分钟阅读

数据库

 
<--下载链接 --> !<--将你的HTML其余部分添加到 --> !

介绍

某些业务对象将ADO记录集返回到它的客户端。 这是在开发 3-tier web应用程序时的常见实践。 你需要在对象或者存储过程中处理业务逻辑,然后将结果/resultset返回到表示层。 通常,你需要将resultset返回到客户端。 表示表示层可以处理 resultset。 ( 例如:转换为 XML,显示结果)。 表示层正在进行处理时,最好将它的与 SQL Server 断开,以保存数据库资源。 ( 比如: 断开连接的记录集)

.有关实现的详细信息

首先,你必须配置 Visual C++ 以使用平台 SDK。 从工具菜单中选择选项. 单击目录选项卡。

  • 添加平台SDK包含目录的条目。 ( 比如: c:platform sdkinclude )
  • 添加 ATL 3.0包含目录的条目。 ( 比如: c:platform sdkincludeatl30 )
  • 为平台SDK的库目录添加一个条目。 ( 比如: c:platform sdklib )
  • 为平台SDK的Bin目录添加一个条目。 ( 比如: c:platform sdkbin ) ( 确保这些条目首先在列表中)

接下来,你必须配置你的项目以使用 ADO。 在 Visual C++ 中使用ADO最简单的方法是使用本机:支持导入ADO类型库并为ADO库中的对象生成智能指针类 RecordsetConnectionCommand 等。 将下面的#import 语句添加到项目中的stdafx.h 文件中:

#import"c:Program FilesCommon FilesSystemADOmsado15.dll" no_namespace rename("EOF","adoEOF") <BR>
这假设你的msado15.dll 驻留在的c:Program FilesCommon FilesSystemADOmsado15.dll 中。 创建接口的方法。

方法名称: GetEmployeeList

参数: [out, retval] _Recordset **returnvalue

STDMETHODIMP CAdoRec::GetEmployeeList(_Recordset **returnvalue)
 {
 _ConnectionPtr pConnection = NULL;
 _CommandPtr pCommand = NULL;
 _RecordsetPtr pRecordset = NULL;
 _bstr_t sql("select lastname,firstname,employeeid from employees");
 try {
 pConnection.CreateInstance(__uuidof(Connection));
 pConnection->Open(CONNECTION_STRING,"","",-1);
 pRecordset.CreateInstance(__uuidof(Recordset));
 pRecordset->CursorLocation=adUseClient;
 pRecordset->Open(sql,pConnection.GetInterfacePtr(), 
 adOpenStatic,adLockBatchOptimistic,-1); 
 pRecordset->AddRef();
 *returnvalue = pRecordset;
 pRecordset->putref_ActiveConnection(NULL);
}
 catch(_com_error err)
 {
 pConnection->Close();
 } 
 pConnection->Close();
 return S_OK;
 }

你必须添加对记录集的引用,然后返回它。 然后,将记录集与数据库连接断开。 你可以修改代码来调用存储过程。

你还必须将ADO类型库导入到你的IDL文件中。 使用 importlib 如下所示。

 import "oaidl.idl";
 import "ocidl.idl";
 [
 uuid(AAC8075D-21AD-46B2-A1BE-9777DE78B4DC),
 version(1.0),
 helpstring("ADOrecordset 1.0 Type Library")
 ]
 library ADORECORDSETLib
 {
 importlib("stdole32.tlb");
 importlib("stdole2.tlb");
 importlib("c:Program FilesCommon FilesSystemADOmsado15.dll");
[
 uuid(DB761CAF-9C4A-42ED-9654-F963552F3FA4),
 helpstring("AdoRec Class")
 ]
 coclass AdoRec
 {
 [default] interface IAdoRec;
 };
 [
 object,
 uuid(E086C0B9-52EC-4F45-AE9D-03BB9CA5FE84),
 dual,
 helpstring("IAdoRec Interface"),
 pointer_default(unique)
 ]
 interface IAdoRec : IDispatch
 {
 [id(1), helpstring("method GetEmployeeList")]
 HRESULT GetEmployeeList([out,
 retval] _Recordset **returnvalue);
 };
 };

这样可以调用 GetEmployeeList 方法将已经断开的记录集返回到 ASP。 请注意,objPagingRS 是断开连接的记录集。 你可以像普通记录集一样 manulate。 为了演示目的,我只是呈现asp页面上的记录集的第一个字段。

<%set fbn=server.CreateObject("adorecordset.adorec")
 set objPagingRS=fbn.GetEmployeeList()
 set fbn=nothingdowhile Not objPagingRS.EOF
 Response.Write "<BR>" + cstr(objPagingRS.Fields(1)) + vbCrLf
 objPagingRS.MoveNext
 loop objPagingRS.Close
 Set objPagingRS = Nothing%>

COM  记录  ADO  disco  Records  Recordset  
相关文章