데이터 소스 컨트롤을 사용하여 데이터 수정
업데이트: 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 컨트롤을 사용하면 특정 형식의 업데이트를 수행하기 위한 데이터 개체 메서드를 지정할 수 있습니다. InsertMethod 속성은 ObjectDataSource 컨트롤에서 데이터 소스에 항목을 삽입할 때 호출되는 데이터 개체 메서드를 지정합니다. 마찬가지로 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 이벤트를 사용하면 새로 삽입된 레코드의 자동 생성된 ID 값을 검색할 수 있습니다.