ADOMD.NET DataAdapter / DataReader 替代方案






3.36/5 (6投票s)
2005 年 10 月 4 日
1分钟阅读

52530

779
这段代码替代了有缺陷的 ADOMD.NET DataAdapter 和 DataReader。
引言
这段代码替代了极其有缺陷的 ADOMD.NET DataReader
和 DataAdapter
类。
背景
我正在使用 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 的直接替代方案。只需将对 AdomdDataReader
、AdomdDataAdapter
、AdomdConnection
和 AdomdCommand
的引用替换为 MyMdDataReader
、MyMdDataAdapter
、MyMdConnection
和 MyMdCommand
分别即可。
就我所测试的而言,它适用于所有 MDX 查询,并将返回与 AdomdDataReader
相同的列名。此外,它将返回查询的父子维度属性,以及 Y 轴上所有维度的以下固有属性:CAPTION
、CHILD_COUNT
、LEVEL_DEPTH
、LEVEL_NAME
、NAME、UNIQUE_NAME
。