缓存数据
更新: 2008 年 7 月
适用于 |
---|
本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。 项目类型
Microsoft Office 版本
有关更多信息,请参见按应用程序和项目类型提供的功能。 |
可将数据对象缓存在文档级自定义项中,以便能够脱机访问数据,或在没有打开 Microsoft Office Word 或 Microsoft Office Excel 的情况下访问数据。若要缓存对象,则对象必须具有满足特定要求的数据类型。.NET Framework 中的许多常见数据类型都满足这些要求,包括 String、DataSet 和 DataTable。
可以通过两种方法将对象添加到数据缓存中:
若要在生成解决方案时将对象添加到数据缓存中,应将 CachedAttribute 属性应用于对象声明。有关更多信息,请参见如何:缓存数据以便脱机使用或在服务器上使用。
若要以编程方式在运行时将对象添加到数据缓存中,应使用宿主项(如 ThisDocument 或 ThisWorkbook 类)的 StartCaching 方法。有关更多信息,请参见如何:以编程方式在 Office 文档中缓存数据源。
在将对象添加到数据缓存后,您就可以访问和修改缓存的数据,而无需启动 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 部件概述。
请参见
任务
修订记录
日期 |
修订历史记录 |
原因 |
---|---|---|
2008 年 7 月 |
添加了关于在密码保护文档中缓存数据的信息。 |
SP1 功能更改。 |