更新:2007 年 11 月
使用 LinqDataSource 控制項可以建立 Web 網頁,讓使用者更新、插入與刪除資料。您不需要指定 SQL 命令,因為 LinqDataSource 控制項會使用動態建立的命令執行這些作業。若要讓使用者修改資料,您可以在 LinqDataSource 控制項上啟用更新、插入或刪除作業。接著,您可以將控制項連接到資料繫結控制項 (例如,DetailsView 或 GridView 控制項),讓使用者可以更新資料。如果想自訂要更新的值,您可以加入參數或建立事件處理常式,然後動態變更值。
此主題說明如何使用 LinqDataSource 控制項自動啟用更新、插入與刪除作業。也將說明如何自訂要更新的值。最後,此主題說明如何建立事件處理常式,以便在插入或更新資料庫資料錄之前以程式設計方式設定屬性。
啟用自動更新、插入與刪除作業的步驟非常類似,而且此主題中的程序說明如何啟用這三個功能。不過,您不需要將三個功能全部啟用。您可以只啟用所需的功能。
如果您對 LinqDataSource 控制項不熟悉,請參閱 LinqDataSource Web 伺服器控制項概觀與逐步解說:使用 LinqDataSource 和 DetailsView 控制項擷取、更新、插入和刪除資料。
自動更新、插入和刪除資料
若要啟用 LinqDataSource 控制項以自動處理資料更新,必須進行下列設定:
在 ContextTypeName 屬性中指定的物件必須衍生自 DataContext 類別。
必須將一個或多個 EnableUpdate、EnableDelete 或 EnableInsert 屬性設定為 true。
啟用更新、插入和刪除資料
將 LinqDataSource 控制項加入至 ASP.NET 網頁。
將 ContextTypeName 屬性設定為衍生自 DataContext 類別之物件的名稱。
當您使用 Visual Studio 2008 中的物件關係設計工具 (Object Relationship Designer) 來建立代表 SQL 資料庫資料表的類別時,會自動從 DataContext 衍生產生的類別。
將 TableName 設定為代表關聯之資料庫資料表的實體 (Entity) 類別的名稱。
將 LinqDataSource 控制項的 EnableUpdate、EnableDelete 與 EnableInsert 屬性設定為 true。
加入資料繫結控制項 (例如,DetailsView 控制項),並將其 DataSourceID 屬性設定為 LinqDataSource 控制項的 ID。
將資料控制項的 DataKeyNames 屬性設定為資料表之主索引鍵資料行的名稱。
在資料繫結控制項提供一種方式,讓使用者可以切換到更新、刪除或編輯模式。
例如,您可以將按鈕加入至資料繫結控制項,或啟用控制項以自動建立那些按鈕。
下列範例顯示 ASP.NET 網頁一部分的宣告式標記,其中網頁包含 LinqDataSource 控制項與 DetailsView 控制項。控制項是設定為可讓使用者顯示、更新、插入和刪除名為 Products 之資料表中的資料。
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > </asp:LinqDataSource> <asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="ProductID" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" AutoGenerateInsertButton="true" AllowPaging="true" ID="DetailsView1" > </asp:DetailsView>
加入參數以更新、插入或刪除資料
根據預設,您不需要加入參數就可以更新、插入或刪除資料。資料繫結控制項會將其值傳遞到 LinqDataSource 控制項,而 LinqDataSource 控制項會使用這些值來設定對應的屬性。LINQ to SQL 會建立命令以修改資料來源。如需詳細資訊,請參閱 LINQ to SQL。
您可以指定用於更新、插入或刪除作業的參數。當您想要提供預設值或定義是否將空字串轉換為 null 時,可以這樣做。您不需要為每個要更新或插入的值指定參數,只需要為要自訂的值指定參數。任何不是由參數定義的值會自動由 LinqDataSource 控制項處理。
LinqDataSource 控制項包含下列可用於管理參數的集合:UpdateParameters、InsertParameters 與 DeleteParameters。
加入用於更新、插入和刪除資料的參數
為您要修改的每個值加入參數定義。
下列範例示範如何為名為 Category 的屬性加入參數。此參數會同時加入至 UpdateParameters 與 InsertParameters 集合。
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > <UpdateParameters> <asp:Parameter Name="Category" DefaultValue="Miscellaneous" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="Category" DefaultValue="Miscellaneous" /> </InsertParameters> </asp:LinqDataSource>當使用者沒有為 Category 屬性提供值時,預設值會儲存到資料庫中。
以程式設計方式設定值
若要在執行資料作業之前以程式設計方式設定屬性,您可以為 LinqDataSource 控制項的 Inserting、Updating 與 Deleting 事件建立事件處理常式。未在事件處理常式中設定的任何屬性會自動由 LinqDataSource 控制項設定。
以程式設計方式設定值
為 LinqDataSource 控制項的 Inserting、Updating 或 Deleting 事件建立事件處理常式。
將程式碼加入至事件處理常式,其會以程式設計方式設定您要修改的值。
要更新、插入或刪除的資料位於下列屬性中:
事件
屬性
類別
這些屬性會傳回 Object 型別的物件。您可以將從這些屬性傳回的物件轉換為代表資料之實體類別的型別。轉換之後,您就可以設定該型別的屬性。
下列範例顯示 Inserting 事件的事件處理常式,此事件會將 DateModified 資料行設定為目前的日期與時間。它會將 NewObject 屬性中的物件轉型為 Product 型別。
Protected Sub LinqDataSource_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceInsertEventArgs) Dim product As Product product = CType(e.NewObject, Product) product.DateModified = DateTime.Now End Subprotected void LinqDataSource_Inserting(object sender, LinqDataSourceInsertEventArgs e) { Product product = (Product)e.NewObject; product.DateModified = DateTime.Now; }下列範例顯示 LinqDataSource 控制項的宣告式標記,此控制項會將 LinqDataSource_Inserting 方法繫結到 Inserting 事件。
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" OnInserting="LinqDataSource_Inserting" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > </asp:LinqDataSource>
編譯程式碼
若要使用 LinqDataSource 控制項來更新、插入或刪除資料,您必須建立代表資料庫資料表的實體類別。您可以使用 Visual Studio 2008 中的物件關係設計工具來建立實體類別。
安全性
這個範例包含一個可接受使用者輸入的文字方塊,這可能會造成安全性威脅。根據預設,ASP.NET 網頁會驗證該使用者的輸入內容中沒有包含指令碼或 HTML 項目。如需詳細資訊,請參閱指令碼攻擊概觀。
如需儲存連接字串的詳細資訊,請參閱 HOW TO:使用資料來源控制項時保護連接字串。
如需不在錯誤訊息中顯示敏感性資訊的詳細資訊,請參閱 HOW TO:顯示安全錯誤訊息。