逐步解說:簡單的物件模型和查詢 (Visual Basic) (LINQ to SQL)
這個逐步解說提供極為簡單的基本端對端 LINQ to SQL 案例。您將建立的實體類別會構成 Northwind 範例資料庫中的 Customers 資料表。接著,您會建立簡單查詢,以便列出位於倫敦的客戶。
這個逐步解說的設計是以程式碼為導向,以協助說明 LINQ to SQL 概念。一般來說,您會使用 物件關聯式設計工具 來建立物件模型。如需詳細資訊,請參閱物件關聯式設計工具 (O/R 設計工具) 和 物件關聯式設計工具 (O/R 設計工具) 和 物件關聯式設計工具 (O/R 設計工具).
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
這個逐步解說是使用 Visual Basic 開發設定所撰寫。
必要條件
這個逐步解說會使用專用資料夾 ("c:\linqtest") 來保存檔案。請先建立這個資料夾,再開始逐步解說。
這個逐步解說需要使用 Northwind 範例資料庫。如果您的開發電腦上沒有這個資料庫,則可以從 Microsoft 下載網站下載。如需相關說明,請參閱下載範例資料庫 (LINQ to SQL)。下載這個資料庫之後,請將檔案複製至 c:\linqtest 資料夾。
概觀
此逐步解說包含六個主要工作:
在 Visual Studio 中建立 LINQ to SQL 方案。
將類別對應至資料庫資料表。
指定類別的屬性以表示資料庫資料表。
指定與 Northwind 資料庫的連接。
建立要對資料庫執行的簡單查詢。
執行查詢並觀察結果。
建立 LINQ to SQL 方案
在第一個工作中,您要建立一個 Visual Studio 方案內含必要的參考,以建置並執行 LINQ to SQL 專案。
若要建立 LINQ to SQL 方案
在 [檔案] 功能表中,按一下 [新增專案]。
在 [新增專案] 對話方塊的 [專案類型] 窗格中,按一下 [Visual Basic]。
按一下 [範本] 窗格中的 [主控台應用程式]。
在 [名稱] 方塊中,輸入 LinqConsoleApp。
按一下 [確定]。
加入 LINQ 參考和指示詞
本逐步解說使用的組件,可能在您的專案中預設為不安裝。如果 System.Data.Linq 未列為專案中的參考 (按一下 [方案總管] 中的 [顯示所有檔案],並展開 [參考] 節點),請按照下列步驟所述將它加入。
若要加入 System.Data.Linq
在 [方案總管] 中,以滑鼠右鍵按一下 [參考],再按一下 [加入參考]。
按一下 [加入參考] 對話方塊中的 [.NET],然後按一下 System.Data.Linq 組件,再按一下 [確定]。
組件隨即加入至專案。
同時按一下 [加入參考] 對話方塊中的 [.NET],然後捲動並按一下 [System.Windows.Forms],再按一下 [確定]。
這個組件支援這個逐步解說中的訊息方塊,並加入至專案中。
將下列指示詞加到 Module1 上方:
Imports System.Data.Linq Imports System.Data.Linq.Mapping Imports System.Windows.Forms
將類別對應至資料庫資料表
在這個步驟中,您會建立類別並將它對應至資料庫資料表。這類類別稱為「實體類別」(Entity Class)。請注意,只要加入 TableAttribute 屬性,即可完成對應。Name 屬性會指定資料庫中資料表的名稱。
若要建立實體類別並將它對應至資料庫資料表
將下列程式碼輸入並貼到 Module1.vb 的 Sub Main 正上方:
<Table(Name:="Customers")> _ Public Class Customer End Class
指定類別的屬性以表示資料庫資料行
在這個步驟中,您會完成下列幾項工作:
您會使用 ColumnAttribute 屬性 (Attribute) 指定實體類別的 CustomerID 和 City 屬性 (Property),以表示資料庫資料表中的資料行。
您會指定 CustomerID 屬性 (Property),以表示資料庫中的主索引鍵資料行。
您會指定 _CustomerID 和 _City 欄位做為私用儲存區。然後,LINQ to SQL 可以直接儲存和擷取值,而不必使用可能含有商務邏輯的公用存取子。
若要表示兩個資料庫資料行的特性
將下列程式碼輸入並貼到 Module1.vb 的 End Class 正前方:
Private _CustomerID As String <Column(IsPrimaryKey:=True, Storage:="_CustomerID")> _ Public Property CustomerID() As String Get Return Me._CustomerID End Get Set(ByVal value As String) Me._CustomerID = value End Set End Property Private _City As String <Column(Storage:="_City")> _ Public Property City() As String Get Return Me._City End Get Set(ByVal value As String) Me._City = value End Set End Property
指定與 Northwind 資料庫的連接
在這個步驟中,您會使用 DataContext 物件,在程式碼架構的資料結構與資料庫本身間建立連接。DataContext 為主要通道,您可透過該通道擷取資料庫中的物件以及送出變更。
您也可以宣告 Table(Of Customer) 做為邏輯具型別資料表,供您查詢資料庫中的 Customers 資料表。您會在後面幾個步驟中,建立和執行這些查詢。
若要指定資料庫連接
將下列程式碼輸入或貼到 Sub Main 方法中。
請注意,假設 northwnd.mdf 檔案是位於 linqtest 資料夾中。如需詳細資訊,請參閱本逐步解說稍早的「必要條件」一節。
' Use a connection string. Dim db As New DataContext _ ("c:\linqtest\northwnd.mdf") ' Get a typed table to run queries. Dim Customers As Table(Of Customer) = _ db.GetTable(Of Customer)()
建立簡單的查詢
在這個步驟中,您會建立查詢以尋找資料庫 Customers 資料表中有哪些客戶位於倫敦。這個步驟中的查詢程式碼只會描述查詢,而不會實際執行。這種方法也稱為「延後執行」(Deferred Execution)。如需詳細資訊,請參閱 LINQ 查詢簡介 (C#)。
此外,您還會產生記錄檔輸出,以顯示 LINQ to SQL 所產生的 SQL 命令。這項記錄功能 (其使用 Log) 有助於進行偵錯,以及判斷要傳送至資料庫的命令是否正確地表示您的查詢。
若要建立簡易的查詢
將下列程式碼輸入或貼到 Sub Main 方法的 Table(Of Customer) 宣告後面:
' Attach the log to show generated SQL in a console window. db.Log = Console.Out ' Query for customers in London. Dim custQuery = _ From cust In Customers _ Where cust.City = "London" _ Select cust
執行查詢
在這個步驟中,您會實際執行查詢。而在需要結果時,才會評估您在前面的步驟中建立的查詢運算式。當您開始 For Each 反覆運算時,會對資料庫執行 SQL 命令,並且將物件具體化。
若要執行查詢
將下列程式碼輸入或貼到 Sub Main 方法的結尾 (在查詢描述後面):
' Format the message box. Dim msg As String = "", title As String = "London customers:", _ response As MsgBoxResult, style As MsgBoxStyle = _ MsgBoxStyle.Information ' Execute the query. For Each custObj In custQuery msg &= String.Format(custObj.CustomerID & vbCrLf) Next ' Display the results. response = MsgBox(msg, style, title)
按 F5,進行應用程式偵錯。
注意事項 如果應用程式產生執行階段錯誤,請參閱從逐步解說學習 (LINQ to SQL) 的<疑難排解>一節。
訊息方塊會顯示內含六位客戶的清單。[主控台] 視窗會顯示產生的 SQL 程式碼。
按一下 [確定] 來解除訊息方塊。
應用程式隨即關閉。
在 [檔案] 功能表上按一下 [全部儲存]。
如果繼續進行下一個逐步解說,則需要這個應用程式。
後續步驟
逐步解說:跨關聯性查詢 (Visual Basic) (LINQ to SQL) 主題會延續這個逐步解說。<跨關聯性查詢>逐步解說會示範 LINQ to SQL 如何跨資料表進行查詢,這類似於關聯式資料庫中的「聯結」(Join)。
如果您想執行<跨關聯性查詢>逐步解說,請務必儲存您剛完成之逐步解說的方案,這是必要的條件。