编写代码以便用自定义的 ActiveX DLL 传送 Recordset 对象

除了使用自定义业务对象以外,下列客户端 Microsoft® Visual Basic® Scripting Edition 代码实现的操作与前面的 RDSServer.DataFactory 代码相同。您仍然可以在客户端上使用 RDS.DataSpace 对象创建服务器中业务对象的实例(在这种情况下是 MyCustomBusinessObject)。

<HTML>

<HEAD></HEAD>

<BODY>

<!-- RDS.DataControl -->

<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33" ID=ADC1>

</OBJECT>

<!-- RDS.DataSpace -->

<OBJECT ID="ADS1" WIDTH=1 HEIGHT=1

  CLASSID="CLSID:BD96C556-65A3-11D0-983A-00C04FC29E36">

</OBJECT>

.

.

.

<SCRIPT LANGUAGE="VBScript">

Option Explicit

Sub GetRecords()

  Dim objMyCustomBusinessObject, myRS

  Set objMyCustomBusinessObject = _

  ADS1.CreateObject("MyCustomBusinessObject", _

  "http://<%=Request.ServerVariables("SERVER_NAME")%>")

  ' 假定 MyCustomBusinessObject 具有

  ' 称为 GetData 的方法,该方法可获得连接字符串和SQL 参数。  

  ' parameters.

  Set myRS = _

  objCustomBusinessObject.GetData _

  ("DSN=pubs;UID=sa;PWD=permission;", _

  "Select * From Authors")

  ' 将返回的记录集赋给  SourceRecordset。

  ADC1.SourceRecordset = myRS

End Sub

</SCRIPT>

</BODY>

</HTML>

假定使用 Visual Basic 创建位于中间层上的 MyCustomBusinessObject ActiveX DLL,那么 MyCustomBusinessObject 类中 GetData 方法的代码应该与如下代码类似。注意您可以直接使用 ActiveX® 数据对象 (ADO)。

'返回 ADO 结果集。

Public Function GetData(szCnStr As String, szSQL _

  As String) As Object

  Dim cn As New ADODB.Connection

  Dim rs As New ADODB.Recordset

  cn.Open szCnStr

  ' ADODB.Recordset 应该生成 Recordset

  ' 对象,该对象可以被断开,随后  

  ' 再恢复连接以处理批更新。

  rs.CursorLocation = adUseClientBatch

  ' 使用非指定参数,ADO/R

  '记录集被返回。

  rs.Open szSQL, cn, _

  adOpenUnspecified, adLockUnspecified, _

  adCmdUnspecified

  Set GetData = rs

End Function

提示

?在试图将 Recordset 对象返回之前,把一个简单的方法放在服务器组件中来测试最小的功能。

 

?在用 Internet Explorer 部署和测试服务器组件之前,构造简单的客户应用程序对它进行测试。

 

?在本地测试 Web 服务器上开发应用程序要更方便一些。在每次编译后需要在测试服务器上复制并注册 .dll。

 

?传送到业务对象的 DSN 应该是服务器上的“系统 DSN”。如果它不存在或没有正确设置,那么用户组件将失败。最好用其它的 ODBC 应用程序(例如 MSQuery)来测试服务器上的 DSN 以确保正确设置 DSN。

 

?自定义业务对象上的方法名不能超过 255 个字符,以确保能兼容 RDS 支持的所有协议(HTTP、HTTPS、DCOM 和进程内)。

 

?如果使用 Visual Basic 创建的自定义业务对象使用以前与 ADOR 1.0 类型库的绑定,那么应该将自定义业务对象重新构造为使用 ADOR 2.0 类型库。