逐步解說:簡單的物件模型和查詢 (Visual Basic) (LINQ to SQL)
更新: November 2007
這個逐步解說提供極為簡單的基本端對端 LINQ to SQL 案例。您將建立的實體類別會構成 Northwind 範例資料庫中的 Customers 資料表。接著,您會建立簡單查詢,以便列出位於倫敦的客戶。
這個逐步解說的設計是以程式碼為導向,以協助說明 LINQ to SQL 概念。一般來說,您會使用物件關聯式設計工具來建立物件模型 (Object Model)。
注意事項: |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
這個逐步解說是使用 Visual Basic 開發設定所撰寫。
必要條件
這個逐步解說會使用專用資料夾 ("c:\linqtest") 來保存檔案。請先建立這個資料夾,再開始逐步解說。
這個逐步解說需要使用 Northwind 範例資料庫。如果您的開發電腦上沒有這個資料庫,則可以從 Microsoft 下載網站下載。如需相關說明,請參閱下載範例資料庫 (LINQ to SQL)。下載這個資料庫之後,請將檔案複製至 c:\linqtest 資料夾。
概觀
此逐步解說包含六個主要工作:
在 Visual Studio 中建立 LINQ to SQL 方案。
將類別對應至資料庫資料表。
指定類別的屬性以表示資料庫資料表。
指定與 Northwind 資料庫的連接。
建立要對資料庫執行的簡單查詢。
執行查詢並觀察結果。
如需觀看示範影片,請參閱影片 HOW TO:簡單的物件模型和查詢 (Visual Basic) (LINQ to SQL)(英文)。
建立 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 欄位做為私用 (Private) 儲存區。然後,LINQ to SQL 可以直接儲存和擷取值,而不必使用可能含有商務邏輯的公用 (Public) 存取子 (Accessor)。
若要表示兩個資料庫資料行的特性
將下列程式碼輸入並貼到 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 查詢簡介。
此外,您還會產生記錄檔輸出,以顯示 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)。
如果您想執行<跨關聯性查詢>逐步解說,請務必儲存您剛完成之逐步解說的方案,這是必要的條件。