保留数据

便携式计算(例如,使用笔记本电脑)催生了对可以同时在连接和断开状态下运行的应用程序的需求。 ADO 增加了这方面的支持,使开发人员能够将客户端游标 Recordset 保存到磁盘并稍后重新加载。

有多种场景可以使用这种类型的功能,包括:

  • 旅行:在路上使用应用程序时,提供更改和添加新记录的功能至关重要,这些记录随后可以重新连接到数据库并提交。

  • 不经常更新的查找:在应用程序中,通常使用表作为查找,例如,州税表。 它们不经常更新,并且是只读的。 无需在每次应用程序启动时从服务器重新读取数据,应用程序只需从本地持久保存的 Recordset 加载数据。

在 ADO 中,若要保存和加载 Recordets,请在 ADO Recordset 对象上使用 Recordset.Save 和 Recordset.Open(,,,,adCmdFile) 方法。

可以使用 Recordset Save 方法将 ADO Recordset 保存到磁盘上的文件中。 (还可以将 Recordset 保存到 ADO Stream 对象。Stream 对象稍后将在本指南中讨论)稍后,可以使用 Open 方法在准备使用 Recordset 时重新打开它。 默认情况下,ADO 将 Recordset 保存为专有的 Microsoft Advanced Data TableGram (ADTG) 格式。 此二进制格式使用 adPersistADTG PersistFormatEnum 值指定。 或者,可以选择使用 adPersistXML 将 Recordset 保存为 XML。 有关将 Recordsets 保存为 XML 的详细信息,请参阅以 XML 格式保存记录

Save 方法的语法如下:

  
recordset.  
Save  
Destination, PersistFormat  
  

首次保存 Recordset 时,可以选择指定 Destination。 如果省略 Destination,则会创建一个新文件,其名称设置为 Recordset 的 Source 属性的值。

在首次保存后调用 Save 时省略 Destination,否则将发生运行时错误。 如果随后使用新 Destination 调用 Save,则 Recordset 将保存到新目标。 但是,新目标和原始目标都将打开。

Save 不会关闭 Recordset 或 Destination,因此可以继续使用 Recordset 并保存最近的更改。 Destination 保持打开状态,直到 Recordset 关闭,在此期间,其他应用程序可以读取但不写入 Destination。

出于安全考虑,Save 方法只允许使用 Microsoft Internet Explorer 执行的脚本中的低安全设置和自定义安全设置。

当异步 Recordset 提取、执行或更新操作正在进行时,如果调用 Save 方法,则 Save 将等待异步操作完成。

记录从 Recordset 的第一行开始保存。 Save 方法完成后,当前行位置将移动到 Recordset 的第一行。

为了获得最佳结果,请使用 Save 将 CursorLocation 属性设置为 adUseClient。 如果提供程序不支持保存 Recordset 对象所需的全部功能,游标服务将提供该功能。

当持久保存 Recordset,并且 CursorLocation 属性被设置为 adUseServer 时,Recordset 的更新功能会受限制。 通常,仅允许单表更新、插入和删除(取决于提供程序功能)。 Resync 方法在此配置中也不可用。

由于 Destination 参数可以接受任何支持 OLE DB IStream 接口的对象,因此可以将 Recordset 直接保存到 ASP Response 对象中。

在以下示例中,Save 和 Open 方法用于保存 Recordset 并稍后重新打开它:

'BeginPersist  
   conn.ConnectionString = _  
   "Provider=SQLOLEDB;Data Source=MySQLServer;" _  
      & "Integrated Security=SSPI;Initial Catalog=pubs"  
   conn.Open  
  
   conn.Execute "create table testtable (dbkey int " & _  
      "primary key, field1 char(10))"  
   conn.Execute "insert into testtable values (1, 'string1')"  
  
   Set rst.ActiveConnection = conn  
   rst.CursorLocation = adUseClient  
  
   rst.Open "select * from testtable", conn, adOpenStatic, _  
      adLockBatchOptimistic  
  
   'Change the row on the client  
   rst!field1 = "NewValue"  
  
   'Save to a file--the .dat extension is an example; choose  
   'your own extension. The changes will be saved in the file  
   'as well as the original data.  
   MyFile = Dir("c:\temp\temptbl.dat")  
   If MyFile <> "" Then  
       Kill "c:\temp\temptbl.dat"  
   End If  
  
   rst.Save "c:\temp\temptbl.dat", adPersistADTG  
   Set rst = Nothing  
  
   'Now reload the data from the file  
   Set rst = New ADODB.Recordset  
   rst.Open "c:\temp\temptbl.dat", , adOpenStatic, _  
      adLockBatchOptimistic, adCmdFile  
  
   Debug.Print "After Loading the file from disk"  
   Debug.Print "   Current Edited Value: " & rst!field1.Value  
   Debug.Print "   Value Before Editing: " & rst!field1.OriginalValue  
  
   'Note that you can reconnect to a connection and  
   'submit the changes to the data source  
   Set rst.ActiveConnection = conn  
   rst.UpdateBatch  
'EndPersist  

备注

本部分包含以下主题。