65.9K
CodeProject 正在变化。 阅读更多。
Home

ADOMD.NET DataAdapter / DataReader 替代方案

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.36/5 (6投票s)

2005 年 10 月 4 日

1分钟阅读

viewsIcon

52530

downloadIcon

779

这段代码替代了有缺陷的 ADOMD.NET DataAdapter 和 DataReader。

引言

这段代码替代了极其有缺陷的 ADOMD.NET DataReaderDataAdapter 类。

背景

我正在使用 ActiveReports for .NET 编写报表,目前正在将大量报表移植到 Analysis Services 和 MDX。在此过程中,我最初使用 ADO 数据适配器通过 ADOMD 数据提供程序。我发现该接口存在一个错误,即无法查询父子维度的属性。这已向 MS 报告,在尝试让它们确认了 2 个月后,它们最终确认这是一个错误,并且他们没有计划修复它。此错误也出现在 ADOMD.NET 中。在发现您也无法查询度量维度固有的属性后,我决定需要编写我自己的数据提供程序。我最初使用 ADOMD.NET Cellset 作为数据源,但它有一个错误,即在某些查询中会因 DuplicateNameException 而崩溃(已向 MS 报告,尚未收到回复)。然后我切换到通过 COM 互操作使用 ADOMD。除了 MyMdDataReader 之外,所有类都是简单的 shell,并且不太有趣。大多数功能都包含在 MyMdDataReader 中。

使用代码

如果您需要使用 DataReader 或从 MDX 表达式填充 DataSet,则此代码是 ADOMD.NET 的直接替代方案。只需将对 AdomdDataReaderAdomdDataAdapterAdomdConnectionAdomdCommand 的引用替换为 MyMdDataReaderMyMdDataAdapterMyMdConnectionMyMdCommand 分别即可。

就我所测试的而言,它适用于所有 MDX 查询,并将返回与 AdomdDataReader 相同的列名。此外,它将返回查询的父子维度属性,以及 Y 轴上所有维度的以下固有属性:CAPTIONCHILD_COUNTLEVEL_DEPTHLEVEL_NAME、NAME、UNIQUE_NAME

© . All rights reserved.