詳細(xì)解讀ADO.NET控制相關(guān)技巧
ADO.NET控制作為一個(gè)高效的.NET程序語(yǔ)言。其混合了函數(shù)語(yǔ)言和物件導(dǎo)向程序編制語(yǔ)言,并且完美的適用于編程、算法、技術(shù)和探索性開(kāi)發(fā),因此可以在使用的過(guò)程當(dāng)中感受到趣味性和吸引力。
創(chuàng)建 DataRelation 所需的參數(shù)是所創(chuàng)建的 DataRelation 的名稱(chēng)以及對(duì)用作關(guān)系中父列和子列的那些列的一個(gè)或多個(gè) DataColumn 引用的數(shù)組。 當(dāng)創(chuàng)建 DataRelation 后,可以使用它在多個(gè)表之間導(dǎo)航和檢索值。#t#
默認(rèn)情況下,向 DataSet 中添加 DataRelation 會(huì)將一個(gè) UniqueConstraint 添加到父表中并將一個(gè) ForeignKeyConstraint 添加到子表中。 有關(guān)這些默認(rèn)約束的更多信息,請(qǐng)參見(jiàn)數(shù)據(jù)表約束 (ADO.NET)。
以下代碼示例使用 DataSet 中的兩個(gè) DataTable 對(duì)象來(lái)創(chuàng)建一個(gè) DataRelation。 每個(gè) DataTable 包含一個(gè)名為 CustID 的列,它用作兩個(gè) DataTable 對(duì)象之間的鏈接。 該示例將單個(gè) DataRelation 添加到 DataSet 的 Relations 集合中。 該示例中的第一個(gè)參數(shù)指定所創(chuàng)建的 DataRelation 的名稱(chēng)。 第二個(gè)參數(shù)設(shè)置父 DataColumn,第三個(gè)參數(shù)設(shè)置子 DataColumn。
- customerOrders.Relations.Add("CustOrders",
- customerOrders.Tables["Customers"].Columns["CustID"],
- customerOrders.Tables["Orders"].Columns["CustID"]);
DataRelation 也具有 Nested 屬性,如果該屬性設(shè)置為 true,則來(lái)自子表的行會(huì)在使用 WriteXml 以 XML 元素形式編寫(xiě)時(shí)嵌套在來(lái)自父表的關(guān)聯(lián)行中。 有關(guān)更多信息,請(qǐng)參見(jiàn)在數(shù)據(jù)集中使用 XML (ADO.NET)。
在某一時(shí)刻只有一個(gè)DataReader能夠打開(kāi)。。在ADO中,如果你打開(kāi)一個(gè)連接并請(qǐng)求兩個(gè)使用只向前的只讀游標(biāo)的記錄集,ADO隱性地為游標(biāo)的生命周期的數(shù)據(jù)存儲(chǔ)打開(kāi)第二個(gè)不在連接池中的連接,接著隱性地關(guān)閉它。在ADO.NET控制中,如果你想在同一個(gè)數(shù)據(jù)存儲(chǔ)上同時(shí)打開(kāi)兩個(gè)DataReader,你必須明確地建立兩個(gè)連接,每個(gè)DataReader一個(gè)。通過(guò)這種方法ADO.NET給了你對(duì)連接池使用的更多控制。
默認(rèn)情況下,DataReader在每個(gè)Read方法中把整個(gè)行載入內(nèi)存中。這允許你隨機(jī)訪問(wèn)當(dāng)前行的任意列。如果隨機(jī)訪問(wèn)是不必要的,為了提高性能,把CommandBehavior.SequentialAccess傳遞給ExecuteReader調(diào)用。這改變了DataReader的默認(rèn)行為,只在需要時(shí)才把數(shù)據(jù)載入內(nèi)存。注意CommandBehavior.SequentialAccess要求你按次序訪問(wèn)返回的列。也就是,一旦你讀過(guò)了返回的某個(gè)列,就不能再次讀取它的值了。