2010-08-22 24 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