Поддерживаются ли иерархические наборы строк JET и SQL Server? - PullRequest
2 голосов
/ 22 августа 2010

Документация OLE DB документирует функцию иерархического набора строк с примерами SQL, но не указывает, какие поставщики БД ее поддерживают. Поддерживают ли JET и SQL Server эту функцию? И используют ли они тот же синтаксис, что и в документации, или их собственный расширенный синтаксис?

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

Да, это поддерживается.Я использовал это совсем немного в прошлом.Эта функция была доступна с помощью службы формирования данных , поставляемой с MDAC (в файле с именем Msadds.dll).Поставщик OLE DB называется MSDataShape, и вы будете использовать команду SHAPE для получения иерархических результатов.Синтаксис строки подключения был похож на следующий:

Jet:

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

SQL Server:

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

Несколько вещей, на которые стоит обратить внимание:

  • Синтаксис SHAPE может стать очень громоздким (и неудобным), поскольку ваши запросы становятся более сложными, так что имейте это в виду.

  • Если выИспользуя .NET, ту же функциональность можно реализовать с классами DataSet и DataRelation.

  • Что более важно, в документации четко указано, что:

Эта функция будет удалена в следующей версии Windows.Избегайте использования этой функции в новых разработках и планируйте модифицировать приложения, которые в настоящее время используют эту функцию.Вместо этого приложения должны использовать XML.

0 голосов
/ 23 августа 2010

Это не прямой ответ на ваш вопрос, поэтому, если вам нужно использовать иерархические наборы строк, просто проигнорируйте его. Я помню, как читал об этой функции около 9 лет назад, но с тех пор я ее не использовал. Я думаю, что это оказалось неправильным путем. С другой стороны, я часто использовал общие табличные выражения (и в частности рекурсивные) и нашел их очень ценными (http://msdn.microsoft.com/en-us/library/ms186243.aspx).) Я думаю, что иерархические наборы строк должны были выполнять объектно-реляционное отображение, и эти наборы строк в любом случае не дают хорошего ORM (NHibernate намного лучше).

...