逐步解說:僅使用預存程序 (Visual Basic)
本逐步解說會提供基本的端對端 LINQ to SQL 案例,只使用預存程序存取資料。 資料庫管理員會使用這個方法來限制對資料存放區的存取。
注意
您也可以使用 LINQ to SQL 應用程式中的預存程序來覆寫預設行為,特別是針對 Create
、Update
和 Delete
處理序。 如需詳細資訊,請參閱自訂插入、更新與刪除作業。
基於本逐步解說的目的,您會使用兩個已對應至 Northwind 範例資料庫中之預存程序的方法:CustOrdersDetail 和 CustOrderHist。 執行 SqlMetal 命令列工具以產生 Visual Basic 檔案時,會發生對應。 如需詳細資訊,請參閱本逐步解說後面的「必要條件」一節。
本逐步解說不依賴物件關聯式設計工具。 使用 Visual Studio 的開發人員也可以使用 O/R 設計工具,來實作預存程序功能。 請參閱 Visual Studio 中的 LINQ to SQL 工具。
注意
在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱將 Visual Studio IDE 個人化。
這個逐步解說是使用 Visual Basic 開發設定所撰寫。
必要條件
本逐步解說需要下列項目:
本逐步解說會使用專用資料夾 ("c:\linqtest3") 來保存檔案。 請先建立這個資料夾,再開始逐步解說。
Northwind 範例資料庫。
如果您的開發電腦上沒有這個資料庫,則可以從 Microsoft 下載網站下載。 如需相關指示,請參閱下載範例資料庫。 下載此資料庫之後,請將 northwnd.mdf 檔複製到 c:\linqtest3 資料夾。
從 Northwind 資料庫產生的 Visual Basic 程式碼檔。
這個逐步解說是使用 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 方案
在 Visual Studio 的 [檔案] 功能表上,按一下 [新增專案] 。
在 [ 新增專案 ] 對話方塊的 [ 專案類型 ] 窗格中,展開 [ Visual Basic],然後按一下 [ Windows]。
在 [範本] 窗格中,按一下 [Windows Form 應用程式] 。
在 [名稱] 方塊中,輸入 SprocOnlyApp。
按一下 [確定]。
Windows Forms 設計工具隨即開啟。
加入 LINQ to SQL 組件參考
標準 Windows Form 應用程式範本中不包含 LINQ to SQL 組件。 您必須按照下列步驟所述自行加入組件:
若要加入 System.Data.Linq.dll
在 [方案總管] 中按一下 [顯示所有檔案]。
在 [方案總管] 中,以滑鼠右鍵按一下 [參考],然後按一下 [新增參考]。
按一下 [加入參考] 對話方塊中的 [.NET],然後按一下 System.Data.Linq 組件,再按一下 [確定]。
組件隨即加入至專案。
將 Northwind 程式碼檔案加入至專案
這個步驟假設您已使用 SqlMetal 工具,從 Northwind 範例資料庫產生程式碼檔。 如需詳細資訊,請參閱本逐步解說稍早的「必要條件」一節。
若要將 Northwind 程式碼檔案加入至專案
在 [專案] 功能表上,按一下 [新增現有項目]。
在 [新增現有項目] 對話方塊中,移至 c:\linqtest3\northwind.vb,然後按一下 [新增]。
northwind.vb file 隨即加入至專案。
建立資料庫連接
在這個步驟中,您會定義與 Northwind 範例資料庫的連接。 本逐步解說會使用 "c:\linqtest3\northwnd.mdf" 做為路徑。
若要建立資料庫連接
在 [方案總管] 中,以滑鼠右鍵按一下 [Form1.vb],然後按一下 [檢視程式碼]。
Class Form1
會顯示在程式碼編輯器中。在
Form1
程式碼區塊中輸入下列程式碼:Dim db As New Northwnd("c:\linqtest3\northwnd.mdf")
設定使用者介面
在這項工作中您會建立介面,供使用者執行預存程序來存取資料庫中的資料。 在您按照本逐步解說開發的應用程式中,使用者只能透過應用程式內嵌的預存程序來存取資料庫中的資料。
若要設定使用者介面
返回 Windows Form 設計工具 (Form1.vb[Design])。
在 [檢視] 功能表上,按一下 [工具箱]。
工具箱隨即開啟。
注意
按一下 [自動隱藏] 圖釘,讓工具箱在您執行本節中的其餘步驟時保持開啟。
將兩個按鈕、兩個文字方塊和兩個標籤從工具箱拖曳至 [Form1]。
如附圖所示排列控制項。 展開 [Form1],讓控制項輕易納入其中。
以滑鼠右鍵按一下 [Label1],然後按一下 [屬性]。
將 [文字] 屬性從 [Label1] 變更為 [輸入 OrderID:]。
以相同方式處理 [Label2],將 [文字] 屬性從 [Label2] 變更為 [輸入 CustomerID:]。
使用相同方式,將 [Button1] 的 [文字] 屬性變更為 [訂單明細]。
將 [Button2] 的 [文字] 屬性變更為 [訂單記錄]。
使按鈕控制項變寬,才能看見所有文字。
若要處理按鈕按一下動作
按兩下 [Form1] 上的 [訂單明細],以建立
Button1
事件處理常式並開啟程式碼編輯器。將下列程式碼輸入到
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 = ""
現在按兩下 Form1 上的 [Button2],以建立
Button2
事件處理常式並開啟程式碼編輯器。將下列程式碼輸入到
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 所訂購的產品記錄。
若要測試應用程式
按 F5 開始偵錯作業。
Form1 隨即出現。
在 [輸入 OrderID] 方塊中,輸入 10249,然後按一下 [訂單明細]。
訊息方塊會列出訂單 10249 中所含的產品。
按一下 [確定] 關閉訊息方塊。
在 [輸入 CustomerID] 方塊中,輸入
ALFKI
,然後按一下 [訂單記錄]。訊息方塊會列出客戶 ALFKI 的訂單記錄。
按一下 [確定] 關閉訊息方塊。
在 [輸入 OrderID] 方塊中,輸入
123
,然後按一下 [訂單明細]。訊息方塊會顯示 "No results."
按一下 [確定] 關閉訊息方塊。
在 [偵錯] 功能表上,按一下 [停止偵錯]。
偵錯工作階段 (Session) 隨即關閉。
如果您已完成實驗,可以按一下 [檔案] 功能表上的 [關閉專案],並且在出現提示時儲存專案。
後續步驟
您可以進行一些變更,以強化這個專案。 例如,您可以在清單方塊中列出可用的預存程序,讓使用者選取所要執行的程序。 您也可以將報表輸出送至文字檔。