2

OLE DB のドキュメントには、SQL の例を含む階層的な行セット機能が記載されていますが、どの DB プロバイダーがそれをサポートしているかは示されていません。JET と SQL Server はこの機能をサポートしていますか? また、ドキュメントと同じ種類の構文を使用していますか、それとも独自の拡張構文を使用していますか?

4

2 に答える 2

2

はい、サポートされています。昔かなり使ってました。この機能は、MDAC (Msadds.dll という名前のファイル) に同梱されているData Shaping Serviceを使用して利用できました。OLE DB プロバイダーに名前が付けられ、 SHAPE コマンドMSDataShapeを使用して階層的な結果を生成します。接続文字列の構文は次のようになります。

ジェット:

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 を使用している場合は、DataSetおよびDataRelationクラスを使用して同じ機能を実現できます。

  • さらに重要なことに、ドキュメントには次のことが明確に記載されています。

この機能は、Windows の将来のバージョンでは削除される予定です。新しい開発作業でこの機能を使用することは避け、現在この機能を使用しているアプリケーションを変更することを計画してください。代わりに、アプリケーションは XML を使用する必要があります。

于 2010-08-23T08:16:55.480 に答える
0

これはあなたの質問に対する直接的な回答ではないため、階層的な行セットを使用する必要がある場合は無視してください。この機能について 9 年前に読んだことを覚えていますが、それ以来使用されていません。それが間違った方法であることが証明されたと思います。一方で、一般的なテーブル式 (特に再帰式) をよく使用し、それらが非常に価値があることを発見しました ( http://msdn.microsoft.com/en-us/library/ms186243.aspx )。階層的な行セットによって行われるはずだったのは、オブジェクト リレーショナル マッピングであり、それらの行セットはとにかく適切な ORM にはなりません (NHibernate の方がはるかに優れています)。

于 2010-08-23T00:45:53.087 に答える