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