詳細說明ADO.NET應用程序進行使用
下一示例以上例為基礎,將四個表關聯(lián)在一起,并瀏覽這些關系。如上例所示,CustomerID使Customers表與Orders表相關聯(lián)。對于Customers表中的每個客戶,將確定Orders表中的所有子行,以返回特定客戶的訂單數(shù)以及他們的OrderID值。
該擴展示例還將返回OrderDetails表和Products表中的值。Orders表使用OrderID與OrderDetails表相關聯(lián),以確定在每一客戶訂單中訂購的產(chǎn)品及數(shù)量。由于OrderDetails表只包含已訂購產(chǎn)品的ProductID,OrderDetails將使用ProductID與Products相關聯(lián),以返回ProductName。在這一關系中,Products表為父表,而OrderDetails表為子表。因此,當循環(huán)訪問OrderDetails表時,將調(diào)用GetParentRow來檢索相關的ProductName值。#t#
請注意,當為Customers表和Orders表創(chuàng)建ADO.NET DataRelation時,沒有為createConstraints標志指定任何值(默認為true)。它假定Orders表中的所有行都具有一個存在于父Customers表中的CustomerID值。如果CustomerID存在于Customers表之外的Orders表中,則ForeignKeyConstraint將引發(fā)異常。
如果子列可能包含父列不包含的值,添加DataRelation時請將createConstraints標志設置為false。在該示例中,對于Orders表和OrderDetails表之間的DataRelation,createConstraints標志將設置為false。這樣,應用程序就可以返回OrderDetails表中的所有記錄并只返回Orders表中記錄的子集,而不會生成運行時異常。該擴展示例生成以下格式的輸出。
ADO.NET應用程序要從數(shù)據(jù)源里讀取數(shù)據(jù),首先得創(chuàng)建一個連接對象.這個連接對象可以是SQLConnection 或是 ADOConnection,這取決于所采用的目標提供程序. 需要記住的是,雖然在這里不做推薦,但你也可以利用ADO .NET 類來連接到SQL Server數(shù)據(jù)庫. 這種方法***不足是,代碼需要通過一個不必要的額外代碼層. 首先它會調(diào)入ADO的托管提供程序, 然后ADO的托管提供程序再調(diào)用SQL Server OLE DB 提供程序. 如同OLE DB 提供程序做的一樣,SQL Server 托管提供程序會直接操作數(shù)據(jù)。#t#
在這些數(shù)據(jù)提供者中都有一個DataAdapter類,如:OLE DB .NET Framework 數(shù)據(jù)提供者中是 OleDbDataAdapter類,The SQL Server .NET Framework 數(shù)據(jù)提供者中是SqlDataAdapter類,The ODBC .NET Framework 數(shù)據(jù)提供者中是OdbcDataAdapter類。通過這些DataAdapter就能夠?qū)崿F(xiàn)從數(shù)據(jù)庫中檢索數(shù)據(jù)并填充 DataSet 中的表。