SqlDataSource를 사용하여 데이터 삽입, 업데이트 및 삭제(VB)Inserting, Updating, and Deleting Data with the SqlDataSource (VB)

Scott Mitchellby Scott Mitchell

샘플 앱 다운로드 또는 PDF 다운로드Download Sample App or Download PDF

이전 자습서에서는 ObjectDataSource 컨트롤이 데이터 삽입, 업데이트 및 삭제를 허용 하는 방법을 배웠습니다.In previous tutorials we learned how the ObjectDataSource control allowed for inserting, updating, and deleting of data. SqlDataSource 컨트롤은 같은 작업을 지원 하지만 접근 방식은 서로 다르며,이 자습서에서는 데이터를 삽입, 업데이트 및 삭제 하도록 SqlDataSource를 구성 하는 방법을 보여 줍니다.The SqlDataSource control supports the same operations, but the approach is different, and this tutorial shows how to configure the SqlDataSource to insert, update, and delete data.

소개Introduction

삽입, 업데이트 및 삭제 개요에 설명 된 대로 GridView 컨트롤은 기본 제공 업데이트 및 삭제 기능을 제공 하는 반면, DetailsView 및 FormView 컨트롤은 편집 및 삭제 기능과 함께 삽입 지원을 포함 합니다.As discussed in An Overview of Inserting, Updating, and Deleting, the GridView control provides built-in updating and deleting capabilities, while the DetailsView and FormView controls include inserting support along with editing and deleting functionality. 이러한 데이터 수정 기능을 작성 해야 하는 코드 줄을 포함 하지 않고 데이터 소스 컨트롤에 직접 연결할 수 있습니다.These data modification capabilities can be plugged directly into a data source control without a line of code needing to be written. ObjectDataSource를 사용 하 여 검사를 삽입, 업데이트 및 삭제 하는 방법에 대 한 개요는 GridView, DetailsView 및 FormView 컨트롤을 사용 하 여 삽입, 업데이트 및 삭제를 용이 하 게 합니다.An Overview of Inserting, Updating, and Deleting examined using the ObjectDataSource to facilitate inserting, updating, and deleting with the GridView, DetailsView, and FormView controls. 또는 ObjectDataSource 대신에 SqlDataSource를 사용할 수 있습니다.Alternatively, the SqlDataSource can be used in place of the ObjectDataSource.

삽입, 업데이트 및 삭제를 지원 하기 위해, 삽입, 업데이트 또는 삭제 작업을 수행 하기 위해 호출할 개체 계층 메서드를 지정 하는 데 필요한 ObjectDataSource를 사용 하 여 삽입, 업데이트 및 삭제를 지원 합니다.Recall that to support inserting, updating, and deleting, with the ObjectDataSource we needed to specify the object layer methods to invoke to perform the insert, update, or delete action. SqlDataSource를 사용 하 여 실행할 SQL 문 (또는 저장 프로시저) INSERT, UPDATEDELETE를 제공 해야 합니다.With the SqlDataSource, we need to provide INSERT, UPDATE, and DELETE SQL statements (or stored procedures) to execute. 이 자습서에서 볼 수 있듯이 이러한 문은 수동으로 만들거나 SqlDataSource의 데이터 원본 구성 마법사에서 자동으로 생성할 수 있습니다.As we'll see in this tutorial, these statements can be created manually or can be automatically generated by the SqlDataSource s Configure Data Source wizard.

Note

GridView, DetailsView 및 FormView 컨트롤의 삽입, 편집 및 삭제 기능을 이미 논의 했으므로이 자습서에서는 이러한 작업을 지원 하도록 SqlDataSource 컨트롤을 구성 하는 방법을 집중적으로 설명 합니다.Since we ve already discussed the inserting, editing, and deleting capabilities of the GridView, DetailsView, and FormView controls, this tutorial will focus on configuring the SqlDataSource control to support these operations. GridView, DetailsView 및 FormView 내에서 이러한 기능을 구현 해야 하는 경우 삽입, 업데이트 및 삭제 개요부터 시작 하 여 데이터 편집, 삽입 및 삭제 자습서로 돌아갑니다.If you need to brush up on implementing these features within the GridView, DetailsView, and FormView, return to the Editing, Inserting, and Deleting Data tutorials, starting with An Overview of Inserting, Updating, and Deleting.

1 단계:INSERT,UPDATEDELETE문 지정Step 1: SpecifyingINSERT,UPDATE, andDELETEStatements

이전 두 자습서에서 보았듯이 SqlDataSource 컨트롤에서 데이터를 검색 하려면 다음 두 가지 속성을 설정 해야 합니다.As we ve seen in the past two tutorials, to retrieve data from a SqlDataSource control we need to set two properties:

  1. ConnectionString는 쿼리를 보낼 데이터베이스를 지정 합니다.ConnectionString, which specifies what database to send the query to, and
  2. SelectCommand-결과를 반환 하기 위해 실행할 임시 SQL 문이나 저장 프로시저 이름을 지정 합니다.SelectCommand, which specifies the ad-hoc SQL statement or stored procedure name to execute to return the results.

매개 변수가 있는 SelectCommand 값의 경우 매개 변수 값은 SqlDataSource s SelectParameters 컬렉션을 통해 지정 되며 하드 코드 된 값, 일반 매개 변수 소스 값 (querystring 필드, 세션 변수, 웹 컨트롤 값 등)을 포함 하거나 프로그래밍 방식으로 할당할 수 있습니다.For SelectCommand values with parameters, the parameter values are specified via the SqlDataSource s SelectParameters collection and can include hard-coded values, common parameter source values (querystring fields, session variables, Web control values, and so on), or can be programmatically assigned. SqlDataSource 컨트롤 s Select() 메서드를 프로그래밍 방식으로 또는 데이터 웹 컨트롤에서 자동으로 호출 하는 경우 데이터베이스에 대 한 연결이 설정 되 고 매개 변수 값이 쿼리에 할당 되 고 명령이 데이터베이스에 shuttled 됩니다.When the SqlDataSource control s Select() method is invoked either programmatically or automatically from a data Web control a connection to the database is established, the parameter values are assigned to the query, and the command is shuttled off to the database. 그런 다음 컨트롤 DataSourceMode 속성의 값에 따라 데이터 집합 또는 DataReader로 결과가 반환 됩니다.The results are then returned as either a DataSet or DataReader, depending on the value of the control s DataSourceMode property.

데이터를 선택 하는 것과 함께 SqlDataSource 컨트롤을 사용 하 여 INSERT, UPDATEDELETE SQL 문을 동일한 방식으로 제공 하 여 데이터를 삽입, 업데이트 및 삭제할 수 있습니다.Along with selecting data, the SqlDataSource control can be used to insert, update, and delete data by supplying INSERT, UPDATE, and DELETE SQL statements in much the same way. 실행할 InsertCommand, UpdateCommandDeleteCommand 속성을 INSERT, UPDATEDELETE SQL 문에 할당 하기만 하면 됩니다.Simply assign the InsertCommand, UpdateCommand, and DeleteCommand properties the INSERT, UPDATE, and DELETE SQL statements to execute. 문에 매개 변수가 있는 경우 (가장 항상 해당) InsertParameters, UpdateParametersDeleteParameters 컬렉션에 포함 합니다.If the statements have parameters (as they most always will), include them in the InsertParameters, UpdateParameters, and DeleteParameters collections.

InsertCommand, UpdateCommand또는 DeleteCommand 값이 지정 되 면 해당 데이터 웹 컨트롤의 스마트 태그에서 삽입 사용, 편집 사용 또는 삭제 가능 옵션을 사용할 수 있게 됩니다.Once an InsertCommand, UpdateCommand, or DeleteCommand value has been specified, the Enable Inserting, Enable Editing, or Enable Deleting option in the corresponding data Web control s smart tag will become available. 이를 설명 하기 위해, SqlDataSource 컨트롤을 사용 하 여 데이터 쿼리 자습서에서 만든 Querying.aspx 페이지의 예제를 사용 하 고 삭제 기능을 포함 하도록 확장 합니다.To illustrate this, let s take an example from the Querying.aspx page we created in the Querying Data with the SqlDataSource Control tutorial and augment it to include delete capabilities.

먼저 InsertUpdateDelete.aspx를 열고 SqlDataSource 폴더에서 페이지 Querying.aspx 합니다.Start by opening the InsertUpdateDelete.aspx and Querying.aspx pages from the SqlDataSource folder. Querying.aspx 페이지의 디자이너에서 첫 번째 예제 (ProductsDataSourceGridView1 컨트롤)에서 SqlDataSource 및 GridView를 선택 합니다.From the Designer on the Querying.aspx page, select the SqlDataSource and GridView from the first example (the ProductsDataSource and GridView1 controls). 두 컨트롤을 선택한 후 편집 메뉴로 이동 하 여 복사를 선택 합니다 (또는 Ctrl + C만 적중).After selecting the two controls, go to the Edit menu and choose Copy (or just hit Ctrl+C). 그런 다음 InsertUpdateDelete.aspx 디자이너로 이동 하 여 컨트롤에 붙여넣습니다.Next, go to the Designer of InsertUpdateDelete.aspx and paste in the controls. InsertUpdateDelete.aspx로 두 컨트롤을 이동한 후 브라우저에서 페이지를 테스트 합니다.After you have moved the two controls over to InsertUpdateDelete.aspx, test out the page in a browser. Products 데이터베이스 테이블의 모든 레코드에 대 한 ProductID, ProductNameUnitPrice 열의 값이 표시 됩니다.You should see the values of the ProductID, ProductName, and UnitPrice columns for all of the records in the Products database table.

모든 제품이 나열 되 ProductID 순으로 정렬 됩니다.All of the Products are Listed, Ordered by ProductID

그림 1: ProductID 기준으로 정렬 된 모든 제품 나열 (전체 크기 이미지를 보려면 클릭)Figure 1: All of the Products are Listed, Ordered by ProductID (Click to view full-size image)

SqlDataSource sDeleteCommandDeleteParameters속성 추가Adding the SqlDataSource sDeleteCommandandDeleteParametersProperties

이 시점에는 Products 테이블의 모든 레코드를 반환 하 고이 데이터를 렌더링 하는 GridView가 있습니다.At this point we have a SqlDataSource that simply returns all of the records from the Products table and a GridView that renders this data. 여기서의 목표는 사용자가 GridView를 통해 제품을 삭제할 수 있도록이 예제를 확장 하는 것입니다.Our goal is to extend this example to allow for the user to delete products via the GridView. 이를 수행 하려면 SqlDataSource 컨트롤 DeleteCommandDeleteParameters 속성 값을 지정 하 고 삭제를 지원 하도록 GridView를 구성 해야 합니다.To accomplish this we need to specify values for the SqlDataSource control s DeleteCommand and DeleteParameters properties and then configure the GridView to support deleting.

DeleteCommandDeleteParameters 속성은 여러 가지 방법으로 지정할 수 있습니다.The DeleteCommand and DeleteParameters properties can be specified in a number of ways:

  • 선언 구문Through the declarative syntax
  • 디자이너의 속성 창에서From the Properties window in the Designer
  • 데이터 원본 구성 마법사의 사용자 지정 SQL 문 또는 저장 프로시저 지정 화면에서From the Specify a custom SQL statement or stored procedure screen in the Configure Data Source wizard
  • 데이터 원본 구성 마법사의 뷰 테이블에서 열 지정 화면에 있는 고급 단추를 통해 DeleteCommandDeleteParameters 속성에 사용 되는 DELETE SQL 문 및 매개 변수 컬렉션을 실제로 자동으로 생성 합니다.Via the Advanced button in the Specify columns from a table of view screen in the Configure Data Source wizard, which will actually automatically generate the DELETE SQL statement and parameter collection used in the DeleteCommand and DeleteParameters properties

2 단계에서 자동으로 DELETE 문을 만드는 방법을 살펴보겠습니다.We'll examine how to automatically have the DELETE statement created in Step 2. 이제 데이터 소스 구성 마법사 또는 선언적 구문 옵션을 사용할 때에도 디자이너에서 속성 창를 사용 하겠습니다.For now, let s use the Properties window in the Designer, although the Configure Data Source wizard or declarative syntax option would work just as well.

InsertUpdateDelete.aspx디자이너에서 ProductsDataSource SqlDataSource를 클릭 한 다음 속성 창를 표시 합니다. 보기 메뉴에서 속성 창를 선택 하거나 F4를 누르기만 하면 됩니다.From the Designer in InsertUpdateDelete.aspx, click on the ProductsDataSource SqlDataSource and then bring up the Properties window (from the View menu, choose Properties window, or simply hit F4). 일련의 줄임표를 표시 하는 DeleteQuery 속성을 선택 합니다.Select the DeleteQuery property, which will bring up a set of ellipses.

속성 창에서 DeleteQuery 속성을 선택 합니다.

그림 2: 속성 창에서 Deletequery 속성을 선택 합니다.Figure 2: Select the DeleteQuery Property from the Properties Window

Note

SqlDataSource에는 DeleteQuery 속성이 없습니다.The SqlDataSource doesn t have a DeleteQuery property. 대신 DeleteQuery는 DeleteCommandDeleteParameters 속성의 조합 이며 디자이너를 통해 창을 볼 때 속성 창에만 나열 됩니다.Rather, DeleteQuery is a combination of the DeleteCommand and DeleteParameters properties and is only listed in the Properties window when viewing the window through the Designer. 원본 뷰에서 속성 창를 확인 하는 경우 DeleteCommand 속성을 대신 찾을 수 있습니다.If you are looking at the Properties window in the Source view, you'll find the DeleteCommand property instead.

DeleteQuery 속성에서 줄임표를 클릭 하 여 명령 및 매개 변수 편집기 대화 상자를 표시 합니다 (그림 3 참조).Click the ellipses in the DeleteQuery property to bring up the Command and Parameter Editor dialog box (see Figure 3). 이 대화 상자에서 DELETE SQL 문을 지정 하 고 매개 변수를 지정할 수 있습니다.From this dialog box you can specify the DELETE SQL statement and specify the parameters. DELETE 명령 텍스트 상자에 다음 쿼리를 입력 합니다 (원하는 경우 수동으로 또는 쿼리 작성기를 사용 하 여).Enter the following query into the DELETE command textbox (either manually or using the Query Builder, if you prefer):

DELETE FROM Products
WHERE ProductID = @ProductID

그런 다음 매개 변수 새로 고침 단추를 클릭 하 여 아래 매개 변수 목록에 @ProductID 매개 변수를 추가 합니다.Next, click the Refresh Parameters button to add the @ProductID parameter to the list of parameters below.

속성 창에서 DeleteQuery 속성을 선택 합니다.Select the DeleteQuery Property from the Properties Window

그림 3: 속성 창에서 Deletequery 속성 선택 (전체 크기 이미지를 보려면 클릭)Figure 3: Select the DeleteQuery Property from the Properties Window (Click to view full-size image)

이 매개 변수에 대 한 값을 제공 하지 마십시오 (매개 변수 소스는 없음).Do not provide a value for this parameter (leave its Parameter source at None ). GridView에 대 한 지원 삭제를 추가 하면 GridView는 삭제 단추를 클릭 한 행에 대 한 DataKeys 컬렉션 값을 사용 하 여이 매개 변수 값을 자동으로 제공 합니다.Once we add deleting support to the GridView, the GridView will automatically supply this parameter value, using the value of its DataKeys collection for the row whose Delete button was clicked.

Note

DELETE 쿼리에 사용 되는 매개 변수 이름은 GridView, DetailsView 또는 FormView의 DataKeyNames 값 이름과 동일 해야 합니다.The parameter name used in the DELETE query must be the same as the name of the DataKeyNames value in the GridView, DetailsView, or FormView. 즉, DELETE 문의 매개 변수는 Products 테이블의 기본 키 열 이름 (즉, GridView의 DataKeyNames 값)이 ProductID되기 때문에 @ID``@ProductID 대신 의도적으로 이름이 지정 됩니다.That is, the parameter in the DELETE statement is purposefully named @ProductID (instead of, say, @ID), because the primary key column name in the Products table (and therefore the DataKeyNames value in the GridView) is ProductID.

매개 변수 이름과 DataKeyNames 값이 일치 하지 않으면 GridView에서 DataKeys 컬렉션의 값에 매개 변수를 자동으로 할당할 수 없습니다.If the parameter name and DataKeyNames value doesn t match, the GridView cannot automatically assign the parameter the value from the DataKeys collection.

명령 및 매개 변수 편집기 대화 상자에 삭제 관련 정보를 입력 한 후 확인을 클릭 하 고 소스 뷰로 이동 하 여 결과 선언 태그를 검사 합니다.After entering the delete-related information into the Command and Parameter Editor dialog box click OK and go to the Source view to examine the resulting declarative markup:

<asp:SqlDataSource ID="ProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    SelectCommand=
        "SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]"
    DeleteCommand="DELETE FROM Products WHERE ProductID = @ProductID">
    <DeleteParameters>
        <asp:Parameter Name="ProductID" />
    </DeleteParameters>
</asp:SqlDataSource>

DeleteCommand 속성이 추가 되 고 <DeleteParameters> 섹션과 productID이라는 매개 변수 개체가 추가 됩니다.Note the addition of the DeleteCommand property as well as the <DeleteParameters> section and the Parameter object named productID.

삭제할 GridView 구성Configuring the GridView for Deleting

DeleteCommand 속성이 추가 된 상태에서 GridView s 스마트 태그는 이제 삭제 사용 옵션을 포함 합니다.With the DeleteCommand property added, the GridView s smart tag now contains the Enable Deleting option. 계속 진행 하 여이 확인란을 선택 합니다.Go ahead and check this checkbox. 삽입, 업데이트 및 삭제 개요에 설명 된 대로 GridView는 ShowDeleteButton 속성이 True로 설정 된 commandfield를 추가 합니다.As discussed in An Overview of Inserting, Updating, and Deleting, this causes the GridView to add a CommandField with its ShowDeleteButton property set to True. 그림 4와 같이 브라우저를 통해 페이지를 방문 하면 삭제 단추가 포함 됩니다.As Figure 4 shows, when the page is visited through a browser a Delete button is included. 일부 제품을 삭제 하 여이 페이지를 테스트 합니다.Test this page out by deleting some products.

이제 각 GridView 행 에 삭제 단추가 포함 됩니다.Each GridView Row Now Includes a Delete Button

그림 4: 각 GridView 행에는 이제 삭제 단추가 포함 됩니다 (전체 크기 이미지를 보려면 클릭).Figure 4: Each GridView Row Now Includes a Delete Button (Click to view full-size image)

삭제 단추를 클릭 하면 다시 게시가 발생 하 고 GridView는 ProductID 매개 변수를 삭제 단추를 클릭 한 행에 대 한 DataKeys 컬렉션 값의 값을 할당 하 고 SqlDataSource s Delete() 메서드를 호출 합니다.Upon clicking a Delete button, a postback occurs, the GridView assigns the ProductID parameter the value of the DataKeys collection value for the row whose Delete button was clicked, and invokes the SqlDataSource s Delete() method. 그런 다음 SqlDataSource 컨트롤은 데이터베이스에 연결 하 고 DELETE 문을 실행 합니다.The SqlDataSource control then connects to the database and executes the DELETE statement. 그러면 GridView가 SqlDataSource에 다시 바인딩되어 현재 제품 집합을 가져오고 표시 합니다. 여기에는 더 이상 삭제 된 레코드가 포함 되지 않습니다.The GridView then rebinds to the SqlDataSource, getting back and displaying the current set of products (which no longer includes the just-deleted record).

Note

GridView는 DataKeys 컬렉션을 사용 하 여 SqlDataSource 매개 변수를 채우기 때문에 GridView s DataKeyNames 속성은 기본 키를 구성 하는 열로 설정 되 고, SqlDataSource s SelectCommand는 이러한 열을 반환 하는 것이 중요 합니다.Since the GridView uses its DataKeys collection to populate the SqlDataSource parameters, it s vital that the GridView s DataKeyNames property be set to the column(s) that constitute the primary key and that the SqlDataSource s SelectCommand returns these columns. 또한 SqlDataSource s DeleteCommand의 매개 변수 이름이 @ProductID으로 설정 되어 있어야 합니다.Moreover, it s important that the parameter name in the SqlDataSource s DeleteCommand is set to @ProductID. DataKeyNames 속성이 설정 되지 않았거나 매개 변수의 이름이 @ProductsID이 아닌 경우 삭제 단추를 클릭 하면 포스트백이 발생 하지만 실제로 레코드는 삭제 되지 않습니다.If the DataKeyNames property is not set or the parameter is not named @ProductsID, clicking the Delete button will cause a postback, but won't actually delete any record.

그림 5는이 상호 작용을 그래픽으로 보여 줍니다.Figure 5 depicts this interaction graphically. 데이터 웹 컨트롤에서 삽입, 업데이트 및 삭제와 관련 된 이벤트 체인에 대 한 자세한 내용은 자습서 삽입, 업데이트 및 삭제와 연결 된 이벤트 검사 를 다시 참조 하세요.Refer back to the Examining the Events Associated with Inserting, Updating, and Deleting tutorial for a more detailed discussion on the chain of events associated with inserting, updating, and deleting from a data Web control.

GridView에서 삭제 단추를 클릭 하면 SqlDataSource s Delete () 메서드가 호출 됩니다.

그림 5: GridView에서 삭제 단추를 클릭 하면 SqlDataSource s Delete() 메서드가 호출 됩니다.Figure 5: Clicking the Delete Button in the GridView Invokes the SqlDataSource s Delete() Method

2 단계:INSERT,UPDATEDELETE문 자동 생성Step 2: Automatically Generating theINSERT,UPDATE, andDELETEStatements

1 단계를 검사 하면 속성 창 또는 컨트롤의 선언적 구문을 통해 INSERT, UPDATEDELETE SQL 문을 지정할 수 있습니다.As Step 1 examined, INSERT, UPDATE, and DELETE SQL statements can be specified through the Properties window or the control s declarative syntax. 그러나이 방법을 사용 하려면 SQL 문을 수동으로 작성 해야 합니다 .이는 단조로운 및 오류가 발생할 수 있습니다.However, this approach requires that we manually write out the SQL statements by hand, which can be monotonous and error-prone. 다행히 데이터 원본 구성 마법사는 뷰 테이블에서 열 지정 화면을 사용 하는 경우 INSERT, UPDATEDELETE 문을 자동으로 생성 하는 옵션을 제공 합니다.Fortunately, the Configure Data Source wizard provides an option to have the INSERT, UPDATE, and DELETE statements automatically generated when using the Specify columns from a table of view screen.

에서이 자동 생성 옵션을 살펴보겠습니다.Let s explore this automatic generation option. InsertUpdateDelete.aspx에서 DetailsView을 디자이너에 추가 하 고 ID 속성을 ManageProducts로 설정 합니다.Add a DetailsView to the Designer in InsertUpdateDelete.aspx and set its ID property to ManageProducts. 그런 다음, DetailsView의 스마트 태그에서 새 데이터 원본을 만들고 ManageProductsDataSource라는 SqlDataSource를 만들도록 선택 합니다.Next, from the DetailsView s smart tag, choose to create a new data source and create a SqlDataSource named ManageProductsDataSource.

ManageProductsDataSource 라는 새 SqlDataSource를 만들 Create a New SqlDataSource Named ManageProductsDataSource

그림 6: ManageProductsDataSource 라는 새 SqlDataSource 만들기 (전체 크기 이미지를 보려면 클릭)Figure 6: Create a New SqlDataSource Named ManageProductsDataSource (Click to view full-size image)

데이터 원본 구성 마법사에서 NORTHWINDConnectionString 연결 문자열을 사용 하도록 선택 하 고 다음을 클릭 합니다.From the Configure Data Source wizard, opt to use the NORTHWINDConnectionString connection string and click Next. Select 문 구성 화면에서 테이블 또는 뷰에서 열 지정 라디오 단추를 선택 된 상태로 두고 드롭다운 목록에서 Products 테이블을 선택 합니다.From the Configure the Select Statement screen, leave the Specify columns from a table or view radio button selected and pick the Products table from the drop-down list. 확인란 목록에서 ProductID, ProductName, UnitPriceDiscontinued 열을 선택 합니다.Select the ProductID, ProductName, UnitPrice, and Discontinued columns from the checkbox list.

Products 테이블을 사용 하 여 ProductID, ProductName, UnitPrice 및 단종 열을 반환 합니다.Using the Products Table, Return the ProductID, ProductName, UnitPrice, and Discontinued Columns

그림 7: Products 테이블을 사용 하 여 ProductID, ProductName, UnitPriceDiscontinued 열 반환 (전체 크기 이미지를 보려면 클릭)Figure 7: Using the Products Table, Return the ProductID, ProductName, UnitPrice, and Discontinued Columns (Click to view full-size image)

선택한 테이블 및 열을 기반으로 INSERT, UPDATEDELETE 문을 자동으로 생성 하려면 고급 단추를 클릭 하 고 INSERT, UPDATEDELETE 문 생성 확인란을 선택 합니다.To automatically generate INSERT, UPDATE, and DELETE statements based on the selected table and columns, click the Advanced button and check the Generate INSERT, UPDATE, and DELETE statements checkbox.

삽입, 업데이트 및 삭제 문 생성 확인란을 선택 합니다.

그림 8: INSERT, UPDATEDELETE 문 생성 확인란을 선택 합니다.Figure 8: Check the Generate INSERT, UPDATE, and DELETE statements Checkbox

선택 된 테이블에 기본 키가 있고 기본 키 열 (또는 열)이 반환 된 열 목록에 포함 되어 있는 경우에만 INSERT, UPDATEDELETE 문 생성 확인란이 선택 가능한 됩니다.The Generate INSERT, UPDATE, and DELETE statements checkbox will only be checkable if the table selected has a primary key and the primary key column (or columns) are included in the list of returned columns. 낙관적 동시성 사용 확인란은 INSERT생성, UPDATEDELETE 문 생성 확인란이 선택 된 후에 선택할 수 있게 되 고, 결과 UPDATEDELETE 문에 WHERE 절을 확장 하 여 낙관적 동시성 제어를 제공 합니다.The Use optimistic concurrency checkbox, which becomes selectable once the Generate INSERT, UPDATE, and DELETE statements checkbox has been checked, will augment the WHERE clauses in the resulting UPDATE and DELETE statements to provide optimistic concurrency control. 지금은이 확인란을 선택 하지 않은 상태로 둡니다. 다음 자습서에서 SqlDataSource 컨트롤을 사용 하 여 낙관적 동시성을 살펴보겠습니다.For now, leave this checkbox unchecked; we'll examine optimistic concurrency with the SqlDataSource control in the next tutorial.

INSERT, UPDATEDELETE 문 생성 확인란을 선택 하 고 확인을 클릭 하 여 Select 문 구성 화면으로 돌아간 후 다음을 클릭 하 고 마침을 클릭 하 여 데이터 원본 구성 마법사를 완료 합니다.After checking the Generate INSERT, UPDATE, and DELETE statements checkbox, click OK to return to the Configure Select Statement screen, then click Next, and then Finish, to complete the Configure Data Source wizard. 마법사가 완료 되 면 Visual Studio는 ProductID, ProductNameUnitPrice 열에 대해 DetailsView에 BoundFields를 추가 하 고 Discontinued 열에 대해 CheckBoxField를 추가 합니다.Upon completing the wizard, Visual Studio will add BoundFields to the DetailsView for the ProductID, ProductName, and UnitPrice columns and a CheckBoxField for the Discontinued column. DetailsView의 스마트 태그에서 페이징 사용 옵션을 선택 하 여이 페이지를 방문 하는 사용자가 제품을 단계별로 실행 하도록 할 수 있습니다.From the DetailsView s smart tag, check the Enable Paging option so that the user visiting this page can step through the products. 또한 DetailsView s WidthHeight 속성을 지웁니다.Also clear out the DetailsView s Width and Height properties.

스마트 태그에는 삽입 가능, 편집 가능 및 삭제 옵션 사용이 설정 되어 있습니다.Notice that the smart tag has the Enable Inserting, Enable Editing, and Enable Deleting options available. 다음 선언 구문에서 볼 수 있듯이 SqlDataSource에 InsertCommand, UpdateCommandDeleteCommand에 대 한 값이 포함 되어 있기 때문입니다.This is because the SqlDataSource contains values for its InsertCommand, UpdateCommand, and DeleteCommand, as the following declarative syntax shows:

<asp:DetailsView ID="ManageProducts" runat="server" AllowPaging="True"
    AutoGenerateRows="False" DataKeyNames="ProductID"
    DataSourceID="ManageProductsDataSource" EnableViewState="False">
    <Fields>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID"
            InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName"
            SortExpression="ProductName" />
        <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
            SortExpression="UnitPrice" />
        <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
            SortExpression="Discontinued" />
    </Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="ManageProductsDataSource" runat="server"
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
    DeleteCommand=
        "DELETE FROM [Products] WHERE [ProductID] = @ProductID"
    InsertCommand=
        "INSERT INTO [Products] ([ProductName], [UnitPrice], [Discontinued])
         VALUES (@ProductName, @UnitPrice, @Discontinued)"
    SelectCommand=
        "SELECT [ProductID], [ProductName], [UnitPrice], [Discontinued]
         FROM [Products]"
    UpdateCommand=
        "UPDATE [Products] SET [ProductName] = @ProductName,
         [UnitPrice] = @UnitPrice, [Discontinued] = @Discontinued
         WHERE [ProductID] = @ProductID">
    <DeleteParameters>
        <asp:Parameter Name="ProductID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
        <asp:Parameter Name="ProductID" Type="Int32" />
    </UpdateParameters>
    <InsertParameters>
        <asp:Parameter Name="ProductName" Type="String" />
        <asp:Parameter Name="UnitPrice" Type="Decimal" />
        <asp:Parameter Name="Discontinued" Type="Boolean" />
    </InsertParameters>
</asp:SqlDataSource>

SqlDataSource 컨트롤에 InsertCommand, UpdateCommandDeleteCommand 속성에 대해 자동으로 설정 된 값이 있는 경우를 확인 합니다.Note how the SqlDataSource control has had values automatically set for its InsertCommand, UpdateCommand, and DeleteCommand properties. InsertCommandUpdateCommand 속성에서 참조 되는 열 집합은 SELECT 문의 해당 열을 기반으로 합니다.The set of columns referenced in the InsertCommand and UpdateCommand properties are based on those in the SELECT statement. 즉, InsertCommandUpdateCommand모든 Products 열을 포함 하는 대신 ProductID``SelectCommand에 지정 된 열만 있습니다. 예를 들어이 열은 IDENTITY이므로 값이 편집 될 때 값을 변경할 수 없으며 삽입 시 자동으로 할당 됩니다.That is, rather than having every Products column in the InsertCommand and UpdateCommand, there are only those columns specified in the SelectCommand (less ProductID, which is omitted because it s an IDENTITY column, whose value cannot be changed when edited and which is automatically assigned when inserting). 또한 InsertCommand, UpdateCommandDeleteCommand 속성의 각 매개 변수에 대해 InsertParameters, UpdateParametersDeleteParameters 컬렉션에 해당 하는 매개 변수가 있습니다.Moreover, for each parameter in the InsertCommand, UpdateCommand, and DeleteCommand properties there are corresponding parameters in the InsertParameters, UpdateParameters, and DeleteParameters collections.

DetailsView의 데이터 수정 기능을 설정 하려면 해당 스마트 태그에서 삽입 사용, 편집 사용 및 삭제 옵션 사용을 선택 합니다.To turn on the DetailsView s data modification features, check the Enable Inserting, Enable Editing, and Enable Deleting options in its smart tag. 그러면 ShowInsertButton, ShowEditButtonShowDeleteButton 속성이 True로 설정 된 CommandField가 추가 됩니다.This adds a CommandField with its ShowInsertButton, ShowEditButton, and ShowDeleteButton properties set to True.

브라우저에서 페이지를 방문 하 여 DetailsView에 포함 된 편집, 삭제 및 새로 만들기 단추를 확인 합니다.Visit the page in a browser and note the Edit, Delete, and New buttons included in the DetailsView. 편집 단추를 클릭 하면 DetailsView이 편집 모드로 전환 됩니다. 그러면 ReadOnly 속성이 False (기본값)으로 설정 되 고 CheckBoxField가 checkbox로 설정 된 각 BoundField 표시 됩니다.Clicking the Edit button turns the DetailsView into edit mode, which displays each BoundField whose ReadOnly property is set to False (the default) as a TextBox, and the CheckBoxField as a checkbox.

DetailsView s 기본 편집 인터페이스를 합니다.The DetailsView s Default Editing Interface

그림 9: DetailsView s 기본 편집 인터페이스 (전체 크기 이미지를 보려면 클릭)Figure 9: The DetailsView s Default Editing Interface (Click to view full-size image)

마찬가지로, 현재 선택한 제품을 삭제 하거나 시스템에 새 제품을 추가할 수 있습니다.Similarly, you can delete the currently selected product or add a new product to the system. InsertCommand 문은 ProductName, UnitPriceDiscontinued 열 에서만 작동 하기 때문에 다른 열에는 NULL 또는 삽입 시 데이터베이스에서 할당 한 기본값이 있습니다.Since the InsertCommand statement only works with the ProductName, UnitPrice, and Discontinued columns, the other columns have either NULL or their default value assigned by the database upon insert. ObjectDataSource와 마찬가지로 InsertCommandNULL s를 허용 하지 않는 데이터베이스 테이블 열이 없는 경우 INSERT 문을 실행 하려고 하면 SQL 오류가 발생 합니다.Just like with the ObjectDataSource, if the InsertCommand is missing any database table columns that don t allow NULL s and don t have a default value, a SQL error will occur when attempting to execute the INSERT statement.

Note

DetailsView s 삽입 및 편집 인터페이스는 사용자 지정 또는 유효성 검사를 수행 하지 않습니다.The DetailsView s inserting and editing interfaces lack any sort of customization or validation. 유효성 검사 컨트롤을 추가 하거나 인터페이스를 사용자 지정 하려면 BoundFields를 템플릿 필드로 변환 해야 합니다.To add validation controls or to customize the interfaces, you need to convert the BoundFields to TemplateFields. 자세한 내용은 인터페이스 편집 및 삽입에 유효성 검사 컨트롤 추가데이터 수정 인터페이스 사용자 지정 을 참조 하세요.Refer to the Adding Validation Controls to the Editing and Inserting Interfaces and Customizing the Data Modification Interface tutorials for more information.

또한 업데이트 및 삭제를 위해 DetailsView은 DataKeyNames 속성이 구성 된 경우에만 존재 하는 현재 제품 DataKey 값을 사용 합니다.Also, keep in mind that for updating and deleting, the DetailsView uses the current product s DataKey value, which is only present if the DataKeyNames property is configured. 편집 또는 삭제 작업이 적용 되지 않는 것으로 나타나는 경우 DataKeyNames 속성이 설정 되어 있는지 확인 합니다.If editing or deleting appears to have no effect, ensure that the DataKeyNames property is set.

SQL 문 자동 생성의 제한 사항Limitations of Automatically Generating SQL Statements

테이블에서 열을 선택 하는 경우에만 INSERT, UPDATEDELETE 문 생성 옵션을 사용할 수 있으므로 보다 복잡 한 쿼리를 위해 1 단계에서 했던 것 처럼 사용자 고유의 INSERT, UPDATEDELETE 문을 작성 해야 합니다.Since the Generate INSERT, UPDATE, and DELETE statements option is only available when picking columns from a table, for more complex queries you will have to write your own INSERT, UPDATE, and DELETE statements like we did in Step 1. 일반적으로 SQL SELECT 문은 JOIN를 사용 하 여 표시를 위해 하나 이상의 조회 테이블에서 데이터를 반환 합니다 (예: 제품 정보를 표시할 때 Categories 테이블의 CategoryName 필드 다시 가져오기).Commonly, SQL SELECT statements use JOIN s to bring back data from one or more lookup tables for display purposes (such as bringing back the Categories table s CategoryName field when displaying product information). 동시에 사용자가 핵심 테이블 (이 경우Products)에 데이터를 편집, 업데이트 또는 삽입 하도록 허용할 수 있습니다.At the same time, we might want to allow the user to edit, update, or insert data into the core table (Products, in this case).

INSERT, UPDATEDELETE 문을 수동으로 입력할 수 있지만 다음 시간 저장 팁을 고려 하십시오.While the INSERT, UPDATE, and DELETE statements can be entered manually, consider the following time-saving tip. 처음에는 SqlDataSource를 설정 하 여 Products 테이블 에서만 데이터를 다시 가져옵니다.Initially setup the SqlDataSource so that it pulls back data just from the Products table. 데이터 원본 구성 마법사 사용 INSERT, UPDATEDELETE 문을 자동으로 생성할 수 있도록 테이블 또는 뷰 화면에서 열을 지정 합니다.Use the Configure Data Source wizard s Specify columns from a table or view screen so that you can automatically generate the INSERT, UPDATE, and DELETE statements. 그런 다음 마법사를 완료 한 후 속성 창에서 SelectQuery를 구성 하도록 선택 합니다. 또는 데이터 원본 구성 마법사로 돌아가 사용자 지정 SQL 문 또는 저장 프로시저 지정 옵션을 사용 합니다.Then, after completing the wizard, choose to configure the SelectQuery from the Properties window (or, alternatively, go back to the Configure Data Source wizard, but use the Specify a custom SQL statement or stored procedure option). 그런 다음 JOIN 구문을 포함 하도록 SELECT 문을 업데이트 합니다.Then update the SELECT statement to include the JOIN syntax. 이 기술은 자동으로 생성 된 SQL 문의 시간 절약 혜택을 제공 하 고 더 많은 사용자 지정 SELECT 문을 허용 합니다.This technique offers the time-saving benefits of the automatically generated SQL statements and allows for a more customized SELECT statement.

INSERT, UPDATEDELETE 문을 자동으로 생성 하는 또 다른 제한 사항은 INSERTUPDATE 문의 열이 SELECT 문에 의해 반환 되는 열을 기반으로 한다는 것입니다.Another limitation of automatically generating the INSERT, UPDATE, and DELETE statements is that the columns in the INSERT and UPDATE statements are based on the columns returned by the SELECT statement. 그러나 더 많거나 더 작은 필드를 업데이트 하거나 삽입 해야 할 수도 있습니다.We may need to update or insert more or fewer fields, however. 예를 들어 2 단계의 예제에서는 UnitPrice BoundField를 읽기 전용으로 설정할 수 있습니다.For example, in the example from Step 2, maybe we want to have the UnitPrice BoundField be read-only. 이 경우 UpdateCommand에 표시 되지 않습니다.In that case, it shouldn't appear in the UpdateCommand. 또는 GridView에 표시 되지 않는 테이블 필드의 값을 설정 하는 것이 좋습니다.Or we may want to set the value of a table field that does not appear in the GridView. 예를 들어 새 레코드를 추가 하는 경우 QuantityPerUnit 값을 TODO로 설정 하는 것이 좋습니다.For example, when adding a new record we may want the QuantityPerUnit value set to TODO .

이러한 사용자 지정이 필요한 경우에는 속성 창, 마법사에서 사용자 지정 SQL 문 또는 저장 프로시저 지정 옵션을 사용 하거나 선언적 구문을 통해 수동으로 만들어야 합니다.If such customizations are required, you need to make them manually, either through the Properties window, the Specify a custom SQL statement or stored procedure option in the wizard, or via the declarative syntax.

Note

데이터 웹 컨트롤에 해당 필드를 포함 하지 않는 매개 변수를 추가 하는 경우 이러한 매개 변수 값에는 특정 방식으로 값을 할당 해야 한다는 점에 유의 하세요.When adding parameters that do not have corresponding fields in the data Web control, keep in mind that these parameters values will need to be assigned values in some manner. 이러한 값은 InsertCommand 또는 UpdateCommand에서 직접 하드 코딩 된 값이 될 수 있습니다. 미리 정의 된 소스 (querystring, 세션 상태, 페이지의 웹 컨트롤 등)에서 가져올 수 있습니다. 이전 자습서에서 살펴본 것 처럼 또는를 프로그래밍 방식으로 할당할 수 있습니다.These values can be: hard-coded directly in the InsertCommand or UpdateCommand; can come from some pre-defined source (the querystring, session state, Web controls on the page, and so on); or can be assigned programmatically, as we saw in the preceding tutorial.

요약Summary

데이터 웹 컨트롤에서 기본 제공 되는 삽입, 편집 및 삭제 기능을 활용 하기 위해 바인딩된 데이터 소스 컨트롤이 이러한 기능을 제공 해야 합니다.In order for the data Web controls to utilize their built-in inserting, editing, and deleting capabilities, the data source control they are bound to must offer such functionality. SqlDataSource의 경우 INSERT, UPDATEDELETE SQL 문을 InsertCommand, UpdateCommandDeleteCommand 속성에 할당 해야 합니다.For the SqlDataSource, this means that INSERT, UPDATE, and DELETE SQL statements must be assigned to the InsertCommand, UpdateCommand, and DeleteCommand properties. 이러한 속성 및 해당 매개 변수 컬렉션은 데이터 원본 구성 마법사를 통해 수동으로 추가 하거나 자동으로 생성할 수 있습니다.These properties, and the corresponding parameters collections, can be added manually or generated automatically through the Configure Data Source wizard. 이 자습서에서는 두 가지 방법을 모두 살펴보았습니다.In this tutorial we examined both techniques.

낙관적 동시성 구현 자습서에서 ObjectDataSource를 사용 하 여 낙관적 동시성을 사용 하는 것을 검토 했습니다.We examined using optimistic concurrency with the ObjectDataSource in the Implementing Optimistic Concurrency tutorial. SqlDataSource 컨트롤은 낙관적 동시성 지원도 제공 합니다.The SqlDataSource control also provides optimistic concurrency support. 2 단계에서 설명한 대로 INSERT, UPDATEDELETE 문을 자동으로 생성 하는 경우 마법사는 낙관적 동시성 사용 옵션을 제공 합니다.As noted in Step 2, when automatically generating the INSERT, UPDATE, and DELETE statements, the wizard offers a Use optimistic concurrency option. 다음 자습서에서 볼 수 있듯이, SqlDataSource와 함께 낙관적 동시성을 사용 하면 UPDATEDELETE 문에서 WHERE 절을 수정 하 여 데이터를 페이지에 마지막으로 표시 한 이후 다른 열의 값이 변경 되지 않도록 할 수 있습니다.As we'll see in the next tutorial, using optimistic concurrency with the SqlDataSource modifies the WHERE clauses in the UPDATE and DELETE statements to ensure that the values for the other columns haven't changed since the data was last displayed on the page.

행복 한 프로그래밍Happy Programming!

저자 정보About the Author

Scott Mitchell(7 개의 ASP/ASP. NET books 및 4GuysFromRolla.com창립자)은 1998부터 Microsoft 웹 기술을 사용 하 여 작업 했습니다.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott은 독립 컨설턴트, 강사 및 기록기로 작동 합니다.Scott works as an independent consultant, trainer, and writer. 최신 책은 24 시간 이내에 ASP.NET 2.0을 sams teach yourself것입니다.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. mitchell@4GuysFromRolla.com에 도달할 수 있습니다 .He can be reached at mitchell@4GuysFromRolla.com. 또는 블로그를 통해 http://ScottOnWriting.NET에서 찾을 수 있습니다.or via his blog, which can be found at http://ScottOnWriting.NET.