2010-08-22 40 views
2

OLE DB文档记录了一个带有SQL示例的hierarchial rowset feature,但未指出哪些DB提供程序支持它。 JET和SQL Server是否支持此功能?他们是否使用与文档中相同的语法,或者他们自己的扩展语法?JET和SQL Server是否支持分层行集?

+0

Jet和SQL Server是两个完全不同的数据库引擎,它们在SQL和各种事物方面的支持上截然不同。这是两个不同的问题,但在我看来,只要尝试一下就可以解决问题。你试过了吗? – 2010-08-22 19:51:20

回答

2

是的,它被支持。过去我已经使用过它了。此功能可以使用随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语法可以(012)尴尬),因为你的 查询变得更加复杂,所以请记住 。

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

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

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

+1

我深入研究了Access子数据表的内容(A2000),并用MSDataShape提供程序快速深入到杂草中。鉴于Access仍然支持当前版本的子数据表,如果不在代码中,UI组件仍然支持它。另外请记住,Jet曾经是MDAC的一部分,但在Jet成为Windows的一个组件之后被删除了一段时间(即Win2000)。鉴于A2000以后似乎对MSDataShape有一定的依赖性,我想知道如果您安装了Access,支持是否存在。 – 2010-08-23 20:02:57

0

这不是您的问题的直接答案,所以如果您必须使用分层行集,请忽略它。 我记得大约9年前阅读过这个功能,但从未见过它被使用过。我认为这被证明是错误的路要走。另一方面,我确实使用了公共表格表达式(特别是递归表达式),并发现它们具有很高的价值(http://msdn.microsoft.com/en-us/library/ms186243.aspx)。 我认为分层行集应该完成的是对象关系映射,而那些行集无论如何都不会产生好的ORM(NHibernate好得多)。

+0

稍作澄清:公用表表达式特定于SQL Server,而问题同时适用于SQL Server和Jet/ACE。 – 2010-08-23 20:00:08

+0

大卫,你是对的。 但考虑到整体技术选择,我个人仍然会避免使用分层行集,我猜NHibernate会很高兴地使用Access。开始工作有点棘手,但几星期后还会付出代价。我多次看到,使用普通的OLEDB,ADO.NET等代替某种映射器(最初做简单的事情)会导致代码混乱。我使用精简并意味着BLToolkit一段时间,它有一个很好的MapResultSets函数,它以声明和面向对象的方式实现了这种映射。 – vaso 2010-08-24 00:22:15