共用方式為


逐步解說:僅使用預存程序 (Visual Basic) (LINQ to SQL)

更新: November 2007

本逐步解說會針對只用預存程序來存取資料,提供基本的端對端 LINQ to SQL 案例。資料庫管理員通常會用這種方法來限制資料存放區的存取方式。

注意事項:

您也可在 LINQ to SQL 應用程式中使用預存程序來覆寫預設行為,尤其是針對 CreateUpdateDelete 處理序。如需詳細資訊,請參閱自訂插入、更新和刪除作業 (LINQ to SQL)

基於本逐步解說的目的,您會使用兩個已對應至 Northwind 範例資料庫中之預存程序的方法:CustOrdersDetail 和 CustOrderHist。當您執行 SqlMetal 命令列工具以產生 Visual Basic 檔時,就會進行對應。如需詳細資訊,請參閱本逐步解說稍後的「必要條件」一節。

這個逐步解說並不依賴物件關聯式設計工具。使用 Visual Studio 的開發人員也可以使用 O/R 設計工具來實作預存程序功能。

注意事項:

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

本逐步解說是使用 Visual Basic 開發設定所撰寫。

必要條件

本逐步解說需要下列項目:

  • 本逐步解說會使用專用資料夾 ("c:\linqtest3") 來保存檔案。請先建立這個資料夾,再開始逐步解說。

  • Northwind 範例資料庫。

    如果您的開發電腦上沒有這個資料庫,可以從 Microsoft 下載網站下載。如需相關說明,請參閱下載範例資料庫 (LINQ to SQL)。下載此資料庫之後,請將 northwnd.mdf 檔複製到 c:\linqtest3 資料夾。

  • Visual Basic 程式碼檔案會從 Northwind 資料庫產生。

    本逐步解說是使用 SqlMetal 工具,以下列命令列所撰寫:

    sqlmetal /code:"c:\linqtest3\northwind.vb" /language:vb "c:\linqtest3\northwnd.mdf" /sprocs /functions /pluralize

    如需詳細資訊,請參閱程式碼產生工具 (SqlMetal.exe)

概觀

此逐步解說包含六個主要工作:

  • 在 Visual Studio 中設定 LINQ to SQL 解決方案。

  • 將 System.Data.Linq 組件加入至專案。

  • 將資料庫程式碼檔案加入至專案。

  • 建立資料庫的連接。

  • 設定使用者介面。

  • 執行和測試應用程式。

建立 LINQ to SQL 方案

在第一個工作中,您要建立一個 Visual Studio 方案內含必要的參考,以建置並執行 LINQ to SQL 專案。

若要建立 LINQ to SQL 方案

  1. 按一下 Visual Studio [檔案] 功能表上的 [新增專案]。

  2. 在 [新增專案] 對話方塊的 [專案類型] 窗格中,展開 [Visual Basic],然後按一下 [Windows]。

  3. 按一下 [範本] 窗格中的 [Windows Form 應用程式]。

  4. 在 [名稱] 方塊中,輸入 SprocOnlyApp。

  5. 按一下 [確定]。

    [Windows Form 設計工具] 隨即開啟。

加入 LINQ to SQL 組件參考

標準 [Windows Form 應用程式] 範本不包含 LINQ to SQL 組件。您必須按照下列步驟所述自行加入組件:

若要加入 System.Data.Linq.dll

  1. 在 [方案總管] 中按一下 [顯示所有檔案]。

  2. 在 [方案總管] 中,以滑鼠右鍵按一下 [參考],再按一下 [加入參考]。

  3. 按一下 [加入參考] 對話方塊中的 [.NET],然後按一下 System.Data.Linq 組件,再按一下 [確定]。

    組件隨即加入至專案。

將 Northwind 程式碼檔案加入至專案

這個步驟假設您已使用 SqlMetal 工具,從 Northwind 範例資料庫產生程式碼檔。如需詳細資訊,請參閱本逐步解說稍早的「必要條件」一節。

若要將 Northwind 程式碼檔案加入至專案

  1. 在 [專案] 功能表上,按一下 [加入現有項目]。

  2. 在 [加入現有項目] 對話方塊中,移至 c:\linqtest3\northwind.vb,然後按一下 [加入]。

    northwind.vb file 隨即加入至專案。

建立資料庫連接

在這個步驟中,您會定義與 Northwind 範例資料庫的連接。本逐步解說會使用 "c:\linqtest3\northwnd.mdf" 做為路徑。

若要建立資料庫連接

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [Form1.vb],然後按一下 [檢視程式碼]。

    Class Form1 會顯示在程式碼編輯器中。

  2. 在 Form1 程式碼區塊中輸入下列程式碼:

    Dim db As New Northwnd("c:\linqtest3\northwnd.mdf")
    

設定使用者介面

在這項工作中您會建立介面,供使用者執行預存程序來存取資料庫中的資料。在您按照本逐步解說開發的應用程式中,使用者只能透過應用程式內嵌的預存程序來存取資料庫中的資料。

若要設定使用者介面

  1. 返回 Windows Form 設計工具 (Form1.vb[Design])。

  2. 在 [檢視] 功能表上,按一下 [工具箱]。

    工具箱隨即開啟。

    注意事項:

    按一下 [自動隱藏] 圖釘,讓工具箱在您執行本節中的其餘步驟時保持開啟。

  3. 從工具箱拖曳兩個按鈕、兩個文字方塊,以及兩個標籤至 [Form1]。

    如附圖所示排列控制項。展開 [Form1],讓控制項輕易納入其中。

  4. 以滑鼠右鍵按一下 [Label1],然後按一下 [屬性]。

  5. 將 [文字] 屬性從 [Label1] 變更為 [輸入 OrderID:]。

  6. 以相同方式處理 [Label2],將 [文字] 屬性從 [Label2] 變更為 [輸入 CustomerID:]。

  7. 使用相同方式,將 [Button1] 的 [文字] 屬性變更為 [訂單明細]。

  8. 將 [Button2] 的 [文字] 屬性變更為 [訂單記錄]。

    將按鈕控制項拉寬,以顯示所有文字。

對話方塊

若要處理按鈕按一下動作

  1. 按兩下 [Form1] 上的 [訂單明細],以建立 Button1 事件處理常式並開啟程式碼編輯器。

  2. 在 Button1 事件處理常式中輸入下列程式碼:

    ' Declare a variable to hold the contents of
    ' TextBox1 as an argument for the stored
    ' procedure.
    Dim parm As String = TextBox1.Text
    
    ' Declare a variable to hold the results returned
    ' by the stored procedure.
    Dim custQuery = db.CustOrdersDetail(parm)
    
    ' Clear the message box of previous results.
    Dim msg As String = ""
    Dim response As MsgBoxResult
    
    ' Execute the stored procedure and store the results.
    For Each custOrdersDetail As CustOrdersDetailResult In custQuery
        msg &= custOrdersDetail.ProductName & vbCrLf
    Next
    
    ' Display the results.
    If msg = "" Then
        msg = "No results."
    End If
    response = MsgBox(msg)
    
    ' Clear the variables before continuing.
    parm = ""
    TextBox1.Text = ""
    
  3. 現在按兩下 Form1 上的 [Button2],以建立 Button2 事件處理常式並開啟程式碼編輯器。

  4. 在 Button2 事件處理常式中輸入下列程式碼:

    ' Comments in the code for Button2 are the same
    ' as for Button1.
    Dim parm As String = TextBox2.Text
    
    Dim custQuery2 = db.CustOrderHist(parm)
    Dim msg As String = ""
    Dim response As MsgBoxResult
    
    For Each custOrdHist As CustOrderHistResult In custQuery2
        msg &= custOrdHist.ProductName & vbCrLf
    Next
    
    If msg = "" Then
        msg = "No results."
    End If
    
    response = MsgBox(msg)
    parm = ""
    TextBox2.Text = ""
    

測試應用程式

現在可以開始測試您的應用程式。請注意,您與資料存放區的接觸限於這兩個預存程序可以採取的所有動作。這些動作是為了傳回任何您輸入之 orderID 所含的產品,或傳回任何您輸入之 CustomerID 所訂購的產品記錄。

若要測試應用程式

  1. 按 F5 開始偵錯。

    [Form1] 隨即出現。

  2. 在 [輸入 OrderID] 方塊中,輸入 10249,然後按一下 [訂單明細]。

    訊息方塊會列出訂單 10249 中所含的產品。

    按一下 [確定] 以關閉訊息方塊。

  3. 在 [輸入 CustomerID] 方塊中,輸入 ALFKI,然後按一下 [訂單記錄]。

    訊息方塊會列出客戶 ALFKI 的訂單記錄。

    按一下 [確定] 以關閉訊息方塊。

  4. 在 [輸入 OrderID] 方塊中,輸入 123,然後按一下 [訂單明細]。

    訊息方塊會顯示 "No results."

    按一下 [確定] 以關閉訊息方塊。

  5. 按一下 [偵錯] 功能表上的 [停止偵錯]。

    偵錯工作階段 (Session) 隨即關閉。

  6. 如果您已完成實驗,可以按一下 [檔案] 功能表上的 [關閉專案],並且在出現提示時儲存專案。

後續步驟

您可以進行一些變更,以強化這個專案。例如,您可以在清單方塊中列出可用的預存程序,讓使用者選取所要執行的程序。您也可以將報表輸出送至文字檔。

請參閱

概念

從逐步解說學習 (LINQ to SQL)

其他資源

預存程序 (LINQ to SQL)