【问题标题】:Are Hierarchical Rowsets supported by JET and SQL Server?JET 和 SQL Server 是否支持分层行集?
【发布时间】:2010-08-24 03:59:39
【问题描述】:

OLE DB 文档记录了hierarchial rowset feature,带有 SQL 示例,但没有说明哪些 DB 提供程序支持它。 JET 和 SQL Server 是否支持此功能?他们是使用与文档中相同的语法,还是他们自己的扩展语法?

【问题讨论】:

  • Jet 和 SQL Server 是两个完全不同的数据库引擎,它们在 SQL 和各种事物方面支持的内容完全不同。这是两个独立的问题,但在我看来,只要尝试一下就可以解决问题。你试过了吗?

标签: sql sql-server winapi oledb jet


【解决方案1】:

是的,它受支持。我过去用过很多次。使用 MDAC 附带的 Data Shaping Service(在名为 Msadds.dll 的文件中)可以使用此功能。 OLE DB 提供程序名为MSDataShape,您将使用SHAPE command 来生成分层结果。连接字符串语法类似于以下内容:

喷气机:

Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=PathToMyDatabase.mdb; 

SQL 服务器:

Provider=MSDataShape;Data Provider=SQLOLEDB;Data Source=ServerNameOrAddress;Initial Catalog=DatabaseName;User ID=;Password=

有几点值得注意:

  • SHAPE 语法可以变得非常 笨重(和尴尬)作为你的 查询变得更加复杂,所以保持 记住这一点。

  • 如果您使用的是 .NET,则可以使用 DataSetDataRelation 类实现相同的功能。

  • 更重要的是,文档明确指出:

此功能将在 未来版本的 Windows。避免使用 此功能在新的开发工作中, 并计划修改应用程序 目前使用此功能。反而, 应用程序应该使用 XML。

【讨论】:

  • 我在当天 (A2000) 深入研究了 Access 子数据表的内容,并很快通过 MSDataShape 提供程序深入了解了这些内容。鉴于 Access 在当前版本中仍然支持子数据表,如果不是在代码中,似乎在 UI 组件中仍然支持它。还要记住,Jet 曾经是 MDAC 的一部分,但在 Jet 成为 Windows 的一个组件(即 Win2000)后被删除了一段时间。鉴于 A2000 以后似乎对 MSDataShape 有一些依赖,我想知道如果您安装了 Access,是否有支持。
【解决方案2】:

这不是您问题的直接答案,因此如果您必须使用分层行集,请忽略它。 我记得大约 9 年前读过有关此功能的信息,但从那以后就没有看到它被使用过。我认为事实证明这是错误的方法。另一方面,我确实经常使用公用表表达式(尤其是递归表达式)并发现它们很有价值(http://msdn.microsoft.com/en-us/library/ms186243.aspx)。 我认为分层行集应该做的是对象关系映射,而这些行集无论如何都不能产生好的 ORM(NHibernate 要好得多)。

【讨论】:

  • 小说明:公用表表达式特定于 SQL Server,而问题是针对 SQL Server 和 Jet/ACE。
  • 大卫,你是对的。但考虑到整体技术选择,我个人仍然会避免使用分层行集,我猜 NHibernate 会很乐意与 Access 一起工作。开始工作有点棘手,但几周后就会得到回报。我已经多次看到使用普通的 OLEDB、ADO.NET 等而不是某种映射器(最初是为了简单起见)导致代码混乱。我用了一段时间的精益和卑鄙的 BLToolkit,它有一个很好的 MapResultSets 函数,它以声明性和面向对象的方式实现了这种映射。
猜你喜欢
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 2012-05-18
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多