在 .NET Framework 應用程式中查詢資料集
注意
資料集和相關類別是 2000 年代初的舊版 .NET Framework 技術,可讓應用程式在應用程式與資料庫中斷連線時使用記憶體中的資料。 這些技術特別適用於可讓使用者修改資料並將變更保存回資料庫的應用程式。 雖然已證明資料集是非常成功的技術,但建議新的 .NET 應用程式使用 Entity Framework Core。 Entity Framework 提供更自然的方式,將表格式資料作為物件模型使用,而且具有更簡單的程式設計介面。
若要搜尋資料集中的特定記錄,請使用 DataTable 上的 FindBy
方法、撰寫您自己的 foreach 陳述式來循環查看資料表的 Rows 集合,或使用 LINQ to DataSet。
資料集區分大小寫
在資料集內,資料表和資料行名稱預設不區分大小寫,也就是說,資料集中名為 "Customers" 的資料表也可以稱為 "Customers"。這符合許多資料庫中的命名慣例,包括 SQL Server。 在 SQL Server 中,預設行為是資料元素的名稱不能只依大小寫區分。
注意
不同於資料集,XML 文件會區分大小寫,因此結構描述中定義的資料元素名稱會區分大小寫。 例如,結構描述通訊協定允許架構定義名為 Customers
的資料表,以及名為 customers
的不同資料表。 當使用包含僅大小寫不同的元素的結構描述來產生資料集類別時,這可能會導致名稱衝突。
不過,區分大小寫會是在資料集內資料解譯方式的一個因素。 例如,如果您篩選資料集資料表中的資料,搜尋準則可能會根據比較是否區分大小寫來傳回不同的結果。 您可以藉由設定資料集的 CaseSensitive 屬性來控制篩選、搜尋和排序的區分大小寫。 資料集中的所有資料表預設都會繼承此屬性的值。 (您可以藉由設定資料表的 CaseSensitive 屬性來覆寫每個個別資料表的此屬性。)
尋找資料表中的特定資料列
在具有主索引鍵值的具類型資料集中尋找資料列
若要尋找資料列,請呼叫使用資料表的主索引鍵的強類型
FindBy
方法。在下列範例中,
CustomerID
資料行是Customers
資料表的主索引鍵。 這表示產生的FindBy
方法是FindByCustomerID
。 範例示範如何使用產生的FindBy
方法來指派特定的 DataRow 給變數。
在具有主索引鍵值的不具類型資料集中尋找資料列
呼叫 DataRowCollection 集合的 Find 方法,將主索引鍵傳遞為參數。
下列範例示範如何宣告名為
foundRow
的新資料列,並為其指派 Find 方法的傳回值。 如果找到主索引鍵,資料行索引 1 的內容會顯示在訊息方塊中。
依資料行值尋找資料列
根據任何資料行中的值尋找資料列
資料表是使用 Select 方法建立,其會根據傳遞至 Select 方法的運算式傳回 DataRow 的陣列。 如需建立有效運算式的詳細資訊,請參閱關於 Expression 屬性頁面的「運算式語法」一節。
存取相關記錄
當資料集中的資料表相關時,DataRelation 物件可以讓相關記錄可在其他資料表中使用。 例如,可以讓包含 Customers
和 Orders
資料表的資料集可供使用。
您可以在父資料表中呼叫 DataRelation 的 GetChildRows 方法,以使用 DataRow 物件來尋找相關記錄。 此方法會傳回相關子記錄的陣列。 或者,您可以在子資料工作表中呼叫 DataRow 的 GetParentRow 方法。 此方法會從父資料表傳回單一 DataRow。
此頁面提供使用具類型資料集的範例。 如需在不具類型資料集中巡覽關聯性的相關資訊,請參閱 巡覽 DataRelations。
注意
如果您在 Windows Forms 應用程式中作業,並使用資料繫結功能來顯示資料,則設計工具產生的表單可能會為您的應用程式提供足夠的功能。 如需詳細資訊,請參閱將控制項繫結至 Visual Studio 中的資料。 具體來說,請參閱資料集中的關聯性。
下列程式碼範例示範如何在具類型的資料集中上下巡覽關聯性。 程式碼範例會使用具類型的 DataRow (NorthwindDataSet.OrdersRow
) 和產生的 FindByPrimaryKey (FindByCustomerID
) 方法來尋找所需的資料列,並傳回相關的記錄。 只有當您有下列項目時,範例才會編譯並正確執行:
具有
Customers
資料表、名為NorthwindDataSet
的資料集的執行個體。Orders
資料表。名為
FK_Orders_Customers
的關聯性,與兩個資料表相關。
此外,這兩個資料表都必須填入要傳回的任何記錄的資料。
傳回所選父記錄的子記錄
呼叫特定
Customers
資料列的 GetChildRows 方法,並傳回來自Orders
資料表的資料列陣列:
傳回所選子記錄的父記錄
呼叫特定
Orders
資料列的 GetParentRow 方法,並傳回來自Customers
資料表的單一資料列: