缓存数据

更新: 2008 年 7 月

适用于

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 文档级项目

Microsoft Office 版本

  • 2007 Microsoft Office system

  • Microsoft Office 2003

有关更多信息,请参见按应用程序和项目类型提供的功能

可将数据对象缓存在文档级自定义项中,以便能够脱机访问数据,或在没有打开 Microsoft Office Word 或 Microsoft Office Excel 的情况下访问数据。若要缓存对象,则对象必须具有满足特定要求的数据类型。.NET Framework 中的许多常见数据类型都满足这些要求,包括 StringDataSetDataTable

可以通过两种方法将对象添加到数据缓存中:

在将对象添加到数据缓存后,您就可以访问和修改缓存的数据,而无需启动 Word 或 Excel。有关更多信息,请参见访问服务器上的文档数据

要缓存的数据对象的要求

如果要缓存创建的数据类型的实例,数据类型必须满足以下要求:

  • 是宿主项的读/写公共字段或属性,比如 ThisDocument 或 ThisWorkbook 类。

  • 不是索引器或其他参数化属性。

此外,数据对象必须可按 XmlSerializer 类序列化,这意味着它必须具有以下特性:

  • 是一个公共类型。

  • 有一个不带参数的公共构造函数。

  • 不执行需要其他安全特权的代码。

  • 只公开读/写公共属性(其他属性将被忽略)。

  • 不公开多维数组(但接受嵌套数组)。

  • 不从属性和字段返回接口。

  • 不实现 IDictionary(如果为集合)。

控制缓存对象的行为

若要更大程度地控制缓存对象的行为,可以对缓冲对象的类型实现 ICachedType 接口。例如,如果希望控制对象更改时通知用户的方式,就可以实现此接口。有关演示如何实现 ICachedType 的代码示例,请参见以下示例应用程序中的 ControlCollection 类:

在密码保护文档中保持对缓存数据的更改

在 Word 2007 和 Excel 2007 的文档级项目中,如果在受密码保护的文档中缓存数据对象,将不保存对缓存数据所做的更改。从 Visual Studio 2008 Service Pack 1 (SP1) 开始,可以通过重写两个方法来保存对缓存数据所做的更改。重写这些方法可以在保存文档时临时取消保护,然后在保存操作完成后重新应用保护。

有关更多信息,请参见如何:在受密码保护的文档中缓存数据

在将 Null 值添加到数据缓存时防止数据丢失

在将对象添加到数据缓存时,必须在保存和关闭文档之前,将所有缓存对象初始化为非 null 值。在保存和关闭文档时,如果有任何缓存对象具有 null 值,则 Visual Studio Tools for Office 运行时会自动将所有缓存对象从数据缓存中移除。

如果在设计时使用 CachedAttribute 属性,将值为 null 的对象添加到数据缓存中,就可以在打开文档之前使用 ServerDocument 类来初始化缓存数据对象。如果您要在最终用户打开文档之前,在未安装 Word 或 Excel 的服务器上初始化缓存数据,则此方法非常有用。有关更多信息,请参见访问服务器上的文档数据

缓存数据如何存储在文档中

当您将数据对象缓存在文档中时,Visual Studio Tools for Office 运行库会将该对象序列化为存储在文档中的一个 XML 字符串。XML 字符串存储于文档中的方式取决于解决方案使用的 Microsoft Office 的版本。

  • 在 Microsoft Office 2003 自定义项中,Visual Studio Tools for Office 运行库将 XML 字符串存储在运行时存储控件中。运行时存储控件是嵌入在文档中的一个 ActiveX 控件。有关更多信息,请参见运行时存储控件概述

  • 在 2007 Microsoft Office system 自定义项中,Visual Studio Tools for Office 运行库将 XML 字符串存储在文档的“自定义 XML 部件”中。有关更多信息,请参见自定义 XML 部件概述

请参见

任务

如何:缓存数据以便脱机使用或在服务器上使用

如何:以编程方式在 Office 文档中缓存数据源

如何:以编程方式停止缓存数据源

如何:在受密码保护的文档中缓存数据

演练:使用缓存的数据集创建主/从关系

修订记录

日期

修订历史记录

原因

2008 年 7 月

添加了关于在密码保护文档中缓存数据的信息。

SP1 功能更改。