逐步解說:操作資料 (C#) (LINQ to SQL)
本逐步解說針對加入、修改和刪除資料庫中的資料,提供基本的端對端 LINQ to SQL 案例。 您將使用範例 Northwind 資料庫的複本來加入客戶、變更客戶名稱,以及刪除訂單。
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
本逐步解說是使用 Visual C# 開發設定撰寫。
必要條件
本逐步解說需要下列項目:
本逐步解說會使用專用資料夾 ("c:\linqtest6") 來保存檔案。 請先建立這個資料夾,再開始逐步解說。
Northwind 範例資料庫。
如果您的開發電腦上沒有這個資料庫,可以從 Microsoft 下載網站下載。 如需相關說明,請參閱下載範例資料庫 (LINQ to SQL)。 下載資料庫之後,請將 northwnd.mdf 檔案複製至 c:\linqtest6 資料夾。
會從 Northwind 資料庫產生 C# 程式碼檔案。
您可以使用物件關聯式設計工具或 SQLMetal 工具來產生這個檔案。 本逐步解說是使用 SQLMetal 工具,以下列命令列所撰寫:
sqlmetal /code:"c:\linqtest6\northwind.cs" /language:csharp "C:\linqtest6\northwnd.mdf" /pluralize
如需詳細資訊,請參閱SqlMetal.exe (程式碼產生工具)。
概觀
此逐步解說包含六個主要工作:
在 Visual Studio 中建立 LINQ to SQL 方案。
將資料庫程式碼檔案加入至專案。
建立新的客戶物件。
修改客戶的連絡人名稱。
刪除訂單。
將這些變更送出至 Northwind 資料庫。
建立 LINQ to SQL 方案
在第一個工作中,您要建立一個 Visual Studio 方案內含必要的參考,以建置並執行 LINQ to SQL 專案。
若要建立 LINQ to SQL 方案
指向 Visual Studio [檔案] 功能表上的 [新增],然後按一下 [專案]。
在 [新增專案] 對話方塊的 [專案類型] 窗格中,按一下 [Visual C#]。
按一下 [範本] 窗格中的 [主控台應用程式]。
在 [名稱] 方塊中,輸入 LinqDataManipulationApp。
在 [位置] 方塊中,確認您要儲存專案檔的位置。
按一下 [確定]。
加入 LINQ 參考和指示詞
本逐步解說使用的組件,可能在您的專案中預設為不安裝。 如果 System.Data.Linq 未列為專案中的參考,請按照下列步驟所述將它加入:
若要加入 System.Data.Linq
在 [方案總管] 中,以滑鼠右鍵按一下 [參考],再按一下 [加入參考]。
按一下 [加入參考] 對話方塊中的 [.NET],然後按一下 System.Data.Linq 組件,再按一下 [確定]。
組件隨即加入至專案。
將下列指示詞加在 Program.cs 的上方:
using System.Data.Linq; using System.Data.Linq.Mapping;
將 Northwind 程式碼檔案加入至專案
這些步驟假設您已使用 SQLMetal 工具,從 Northwind 範例資料庫產生程式碼檔案。 如需詳細資訊,請參閱本逐步解說稍早的「必要條件」一節。
若要將 Northwind 程式碼檔案加入至專案
在 [專案] 功能表上,按一下 [加入現有項目]。
在 [加入現有項目] 對話方塊中,巡覽至 c:\linqtest6\northwind.cs,然後按一下 [加入]。
northwind.cs 檔案會加入至專案。
設定資料庫連接
請先測試與資料庫的連接。 請特別注意,資料庫 Northwnd 沒有字母 i。 如果在後續步驟發生錯誤,則請檢閱 northwind.cs 檔案,以判斷 Northwind 部分類別的拼法。
若要設定和測試資料庫連接
將下列程式碼輸入或貼入 Program 類別的 Main 方法:
// Use the following connection string. Northwnd db = new Northwnd(@"c:\linqtest6\northwnd.mdf"); // Keep the console window open after activity stops. Console.ReadLine();
按 F5,立即測試應用程式。
[主控台] 視窗隨即開啟。
在 [主控台] 視窗中按 Enter 鍵,或按一下 Visual Studio [偵錯] 功能表上的 [停止偵錯],就可以關閉應用程式。
建立新的實體
建立新的實體十分簡單。 您可以使用 new 關鍵字,建立物件 (如 Customer)。
在本節和下列各節中,您變更的只是本機快取。 在本逐步解說最後呼叫 SubmitChanges 之前,都不會將變更傳送至資料庫。
若要加入新的 Customer 實體物件
在 Main 方法的 Console.ReadLine(); 前面加入下列程式碼,建立新的 Customer:
// Create the new Customer object. Customer newCust = new Customer(); newCust.CompanyName = "AdventureWorks Cafe"; newCust.CustomerID = "ADVCA"; // Add the customer to the Customers table. db.Customers.InsertOnSubmit(newCust); Console.WriteLine("\nCustomers matching CA before insert"); foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA"))) { Console.WriteLine("{0}, {1}, {2}", c.CustomerID, c.CompanyName, c.Orders.Count); }
按 F5 對方案進行偵錯。
在 [主控台] 視窗中按 ENTER 鍵,以停止偵錯並繼續逐步解說。
更新實體
在下列步驟中,您會擷取 Customer 物件,並修改它的其中一個屬性。
若要變更 Customer 的名稱
將下列程式碼加入至 Console.ReadLine(); 的上方:
// Query for specific customer. // First() returns one object rather than a collection. var existingCust = (from c in db.Customers where c.CustomerID == "ALFKI" select c) .First(); // Change the contact name of the customer. existingCust.ContactName = "New Contact";
刪除實體
您可以使用同一個客戶物件,刪除第一份訂單。
在下列程式碼中,會示範如何中斷資料列之間的關聯性 (Relationship),以及如何刪除資料庫中的資料列。 將下列程式碼加入至 Console.ReadLine 的前面,以查看如何刪除物件:
若要刪除資料列
將下列程式碼加入至 Console.ReadLine(); 的正上方:
// Access the first element in the Orders collection. Order ord0 = existingCust.Orders[0]; // Access the first element in the OrderDetails collection. OrderDetail detail0 = ord0.OrderDetails[0]; // Display the order to be deleted. Console.WriteLine ("The Order Detail to be deleted is: OrderID = {0}, ProductID = {1}", detail0.OrderID, detail0.ProductID); // Mark the Order Detail row for deletion from the database. db.OrderDetails.DeleteOnSubmit(detail0);
將變更送出至資料庫
建立、更新和刪除物件的最終必要步驟是實際將變更送出至資料庫。 沒有這個步驟,所進行的變更只是針對本機,並不會出現在查詢結果中。
若要將變更送出至資料庫
將下列程式碼插入至 Console.ReadLine 的正上方:
db.SubmitChanges();
將下列程式碼插入至 SubmitChanges 的後面,以顯示送出變更之前和之後的效果:
Console.WriteLine("\nCustomers matching CA after update"); foreach (var c in db.Customers.Where(cust => cust.CustomerID.Contains("CA"))) { Console.WriteLine("{0}, {1}, {2}", c.CustomerID, c.CompanyName, c.Orders.Count); }
按 F5 對方案進行偵錯。
在 [主控台] 視窗中按 ENTER 鍵,以關閉應用程式。
注意事項 |
---|
送出變更以加入新的客戶之後,無法再照原狀執行這個方案。若要重新執行方案,請變更要加入的客戶名稱和客戶識別碼。 |