使用資料來源控制項修改資料
更新:2007 年 11 月
資料來源控制項可以大幅擴展資料繫結控制項 (例如 ListView、GridView、FormView 和 DetailsView 控制項) 的功能,不需大量額外的程式碼就能夠修改資料來源的資料。資料來源控制項會執行資料修改,因此資料繫結控制項不需要資料庫或其他資料來源的特定資訊就能夠支援更新。您可以將不同的資料來源控制項與網頁上任意的控制項組合搭配使用。此外,您也可以將資料繫結控制項的 DataSourceID 指向不同的資料來源控制項,變更所使用的資料庫或資料來源。
資料修改命令
您可以用資料命令設定 ObjectDataSource、SqlDataSource 和 AccessDataSource 控制項,以便插入、更新和刪除在其關聯之資料存放區中的資料。
當您使用 LinqDataSource 控制項來進行資料修改作業時,不必提供可插入、更新與刪除資料的命令。這些命令會自動為您產生。
使用 LinqDataSource 控制項修改資料
您可以將 EnableInsert、EnableUpdate 和 EnableDelete 屬性設為 true,便能使用 LinqDataSource 控制項來插入、更新與刪除作業。當這些屬性皆為 true 時,LinqDataSource 控制項會使用 LINQ to SQL 來自動建立修改資料的命令。
下列範例說明已將 EnableInsert、EnableUpdate 和 EnableDelete 設為 true 的 LinqDataSource 控制項。DetailsView 控制項可顯示資料,且會為每個可讓使用者修改資料的命令建立一個按鈕。
<asp:LinqDataSource
ContextTypeName="ExampleDataContext"
TableName="Products"
EnableUpdate="true"
EnableInsert="true"
EnableDelete="true"
ID="LinqDataSource1"
>
</asp:LinqDataSource>
<asp:DetailsView
DataKeyNames="ProductID"
AutoGenerateEditButton="true"
AutoGenerateDeleteButton="true"
AutoGenerateInsertButton="true"
AllowPaging="true"
DataSourceID="LinqDataSource1"
ID="GridView1"
>
</asp:DetailsView>
<asp:LinqDataSource
ContextTypeName="ExampleDataContext"
TableName="Products"
EnableUpdate="true"
EnableInsert="true"
EnableDelete="true"
ID="LinqDataSource1"
>
</asp:LinqDataSource>
<asp:DetailsView
DataKeyNames="ProductID"
AutoGenerateEditButton="true"
AutoGenerateDeleteButton="true"
AutoGenerateInsertButton="true"
AllowPaging="true"
DataSourceID="LinqDataSource1"
ID="GridView1"
>
</asp:DetailsView>
使用 ObjectDataSource 控制項修改資料
ObjectDataSource 控制項能夠讓您指定執行特定更新類型的資料物件方法。當 ObjectDataSource 控制項在資料來源中插入項目時,InsertMethod 屬性會指定要呼叫的資料物件方法。同樣地,UpdateMethod 屬性會指定用在項目更新的資料物件方法,而 DeleteMethod 屬性會指定從資料來源刪除項目的方法。
下列程式碼範例示範使用基礎資料物件的方法名稱,設定 InsertMethod、UpdateMethod 和 DeleteMethod 屬性的 ObjectDataSource 控制項。
<asp:ObjectDataSource
ID="EmployeeDetailsObjectDataSource"
TypeName="Samples.AspNet.Controls.NorthwindEmployee"
SelectMethod="GetEmployee"
UpdateMethod="UpdateEmployee"
DeleteMethod="DeleteEmployee"
InsertMethod="InsertEmployee"
OnInserted="EmployeeDetailsObjectDataSource_OnInserted" >
<SelectParameters>
<asp:Parameter Name="EmployeeID" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="NewEmployeeID" Direction="Output"
Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:ObjectDataSource>
<asp:ObjectDataSource
ID="EmployeeDetailsObjectDataSource"
TypeName="Samples.AspNet.Controls.NorthwindEmployee"
SelectMethod="GetEmployee"
UpdateMethod="UpdateEmployee"
DeleteMethod="DeleteEmployee"
InsertMethod="InsertEmployee"
OnInserted="EmployeeDetailsObjectDataSource_OnInserted" >
<SelectParameters>
<asp:Parameter Name="EmployeeID" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="NewEmployeeID" Direction="Output"
Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:ObjectDataSource>
如需詳細資訊,請參閱建立 ObjectDataSource 控制項來源物件。
使用 SQL 命令修改資料
SqlDataSource 和 AccessDataSource 控制項能夠讓您提供 SQL 命令修改資料來源的資料。InsertCommand 屬性會指定 SQL 命令將記錄插入資料來源中。同樣地,UpdateCommand 屬性指定用來更新記錄的命令,而 DeleteCommand 屬性指定用來從資料來源刪除記錄的命令。
下列程式碼範例示範使用 SQL 命令執行更新工作,設定 InsertCommand、UpdateCommand 和 DeleteCommand 屬性的 SqlDataSource 控制項。
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"
InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName);
SELECT @EmpID = SCOPE_IDENTITY()"
UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName
WHERE EmployeeID=@EmployeeID"
DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
RunAt="server">
<SelectParameters>
<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:sqlDataSource>
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"
InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName);
SELECT @EmpID = SCOPE_IDENTITY()"
UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName
WHERE EmployeeID=@EmployeeID"
DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
RunAt="server">
<SelectParameters>
<asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
</InsertParameters>
</asp:sqlDataSource>
如需詳細資訊,請參閱使用 SqlDataSource 控制項修改資料。
參數
您可以使用參數傳遞要在資料存放區中插入、更新或刪除的值,讓資料更新案例更有安全彈性。參數值可以包含網頁上控制項的值、ASP.NET 應用程式變數、工作階段值等。
當資料繫結控制項叫用更新、插入或刪除作業時,參數值通常是來自此資料繫結控制項。此外,您也可以針對指定的作業,建立資料來源控制項的明確參數物件,以便讓您自訂參數。例如,您可以使用明確參數物件指定參數類型或方向,或在傳遞 null 值的情況下定義參數預設值。
針對 ObjectDataSource 控制項,當呼叫基礎資料物件的適當方法時,會將參數值當做引數傳遞。針對 SqlDataSource 或 AccessDataSource 控制項,則會將參數值傳遞至用來更新的 SQL 命令。如需詳細資訊與範例,請參閱使用含有資料來源控制項的參數。
事件
資料來源控制項在修改資料前後都會引發事件。您可以使用這些事件在發生資料作業之前 (包含取消作業),以及發生資料作業之後執行程式碼。例如,您可以使用 SqlDataSource 控制項的 Deleting 事件,記錄關於要刪除記錄的資訊。您也可以使用 SqlDataSource 控制項的 Inserted 事件,擷取新插入記錄所自動產生的識別值。