共用方式為


HOW TO:使用 LinqDataSource 控制項更新、插入和刪除資料

更新:2007 年 11 月

使用 LinqDataSource 控制項可以建立 Web 網頁,讓使用者更新、插入與刪除資料。您不需要指定 SQL 命令,因為 LinqDataSource 控制項會使用動態建立的命令執行這些作業。若要讓使用者修改資料,您可以在 LinqDataSource 控制項上啟用更新、插入或刪除作業。接著,您可以將控制項連接到資料繫結控制項 (例如,DetailsViewGridView 控制項),讓使用者可以更新資料。如果想自訂要更新的值,您可以加入參數或建立事件處理常式,然後動態變更值。

此主題說明如何使用 LinqDataSource 控制項自動啟用更新、插入與刪除作業。也將說明如何自訂要更新的值。最後,此主題說明如何建立事件處理常式,以便在插入或更新資料庫資料錄之前以程式設計方式設定屬性。

啟用自動更新、插入與刪除作業的步驟非常類似,而且此主題中的程序說明如何啟用這三個功能。不過,您不需要將三個功能全部啟用。您可以只啟用所需的功能。

如果您對 LinqDataSource 控制項不熟悉,請參閱 LinqDataSource Web 伺服器控制項概觀逐步解說:使用 LinqDataSource 和 DetailsView 控制項擷取、更新、插入和刪除資料

自動更新、插入和刪除資料

若要啟用 LinqDataSource 控制項以自動處理資料更新,必須進行下列設定:

啟用更新、插入和刪除資料

  1. LinqDataSource 控制項加入至 ASP.NET 網頁。

  2. ContextTypeName 屬性設定為衍生自 DataContext 類別之物件的名稱。

    當您使用 Visual Studio 2008 中的物件關係設計工具 (Object Relationship Designer) 來建立代表 SQL 資料庫資料表的類別時,會自動從 DataContext 衍生產生的類別。

  3. TableName 設定為代表關聯之資料庫資料表的實體 (Entity) 類別的名稱。

  4. LinqDataSource 控制項的 EnableUpdateEnableDeleteEnableInsert 屬性設定為 true。

  5. 加入資料繫結控制項 (例如,DetailsView 控制項),並將其 DataSourceID 屬性設定為 LinqDataSource 控制項的 ID。

  6. 將資料控制項的 DataKeyNames 屬性設定為資料表之主索引鍵資料行的名稱。

  7. 在資料繫結控制項提供一種方式,讓使用者可以切換到更新、刪除或編輯模式。

    例如,您可以將按鈕加入至資料繫結控制項,或啟用控制項以自動建立那些按鈕。

    下列範例顯示 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 控制項包含下列可用於管理參數的集合:UpdateParametersInsertParametersDeleteParameters

加入用於更新、插入和刪除資料的參數

  • 為您要修改的每個值加入參數定義。

    下列範例示範如何為名為 Category 的屬性加入參數。此參數會同時加入至 UpdateParametersInsertParameters 集合。

    <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 控制項的 InsertingUpdatingDeleting 事件建立事件處理常式。未在事件處理常式中設定的任何屬性會自動由 LinqDataSource 控制項設定。

以程式設計方式設定值

  1. LinqDataSource 控制項的 InsertingUpdatingDeleting 事件建立事件處理常式。

  2. 將程式碼加入至事件處理常式,其會以程式設計方式設定您要修改的值。

    要更新、插入或刪除的資料位於下列屬性中:

    事件

    屬性

    類別

    Inserting

    NewObject

    LinqDataSourceInsertEventArgs

    Updating

    NewObject

    OriginalObject

    LinqDataSourceUpdateEventArgs

    Deleting

    OriginalObject

    LinqDataSourceDeleteEventArgs

    這些屬性會傳回 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 Sub
    
    protected 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:顯示安全錯誤訊息

請參閱

概念

LinqDataSource Web 伺服器控制項概觀

參考

Parameter