연습: LinqDataSource 및 DetailsView 컨트롤에서 정보 검색, 업데이트, 삽입 및 삭제

업데이트: 2007년 11월

이 연습에서는 LinqDataSource 컨트롤을 사용하는 단순한 데이터베이스 테이블과 웹 페이지를 만듭니다. 사용자는 웹 페이지를 사용하여 데이터베이스 테이블에서 데이터를 검색, 업데이트, 삽입 및 삭제할 수 있습니다. 그런 다음 DetailsView 컨트롤을 사용하여 데이터를 표시합니다. LinqDataSource 컨트롤을 사용하면 Select, Update, Insert 또는 Delete 문을 작성하지 않고도 이러한 작업을 모두 수행할 수 있습니다.

개체 관계형 디자이너를 사용하여 값이 포함된 데이터베이스 테이블을 나타내는 클래스를 만듭니다. LinqDataSource 컨트롤은 이렇게 생성된 클래스와 상호 작용하여 데이터를 검색, 업데이트, 삽입 및 삭제합니다.

사전 요구 사항

고유한 개발 환경에서 절차를 구현하려면 다음이 필요합니다.

  • Visual Studio 2008 또는 Visual Web Developer Express Edition

  • 컴퓨터에 설치된 SQL Server Express Edition. SQL Server가 설치되어 있으면 대신 이를 사용할 수 있지만 일부 절차가 약간 달라집니다.

  • ASP.NET 웹 사이트.

데이터베이스 테이블 만들기

이 연습의 단계를 수행하려면 데이터베이스 테이블이 있어야 합니다. 테이블이 아직 없는 경우 다음 절차를 사용하여 새로 만들 수 있습니다. 기존 테이블을 사용하는 경우 일부 절차의 단계가 사용자 데이터베이스와 정확하게 일치하지 않습니다. 그러나 연습에 설명되는 개념은 동일합니다.

데이터베이스 테이블을 만들려면

  1. 웹 사이트에 아직 App_Data 폴더가 없는 경우 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 ASP.NET 폴더 추가를 클릭한 다음 App_Data를 클릭합니다.

  2. App_Data 폴더를 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.

  3. 설치된 템플릿에서 SQL 데이터베이스를 선택하고 파일 이름을 Reviews.mdf로 변경한 다음 추가를 클릭합니다.

    Reviews.mdf라는 SQL 데이터베이스 항목 추가

  4. 서버 탐색기에서 Reviews.mdf 노드를 연 다음 테이블 폴더를 마우스 오른쪽 단추로 클릭합니다.

  5. 새 테이블 추가를 클릭합니다.

  6. 테이블에 다음과 같은 열을 만듭니다.

    열 이름

    데이터 형식

    속성

    MovieID

    int

    IsIdentity = Yes

    null 아님

    기본 키

    Title

    nvarchar(50)

    Theater

    nvarchar(50)

    Review

    nvarchar(1000)

    Score

    int

    null 아님

    데이터베이스 테이블 만들기

  7. 테이블을 저장하고 이름을 MovieReviews로 지정합니다.

  8. 샘플 데이터를 사용하여 MovieReviews 테이블에 레코드를 여러 개 추가합니다.

    서버 탐색기에서 MovieReviews 테이블을 마우스 오른쪽 단추로 클릭하고 테이블 데이터 표시를 클릭합니다. MovieID의 값은 데이터베이스에서 생성되므로 지정할 필요가 없습니다.

데이터베이스 엔터티를 나타내는 클래스 만들기

LinqDataSource 컨트롤을 사용하려면 데이터베이스 엔터티를 나타내는 클래스를 사용해야 합니다. Visual Studio 2008 또는 Visual Web Developer Express Edition의 도구를 사용하여 이러한 클래스를 만들 수 있습니다.

MovieReviews 테이블의 클래스를 만들려면

  1. 웹 사이트에 아직 App_Code 폴더가 없는 경우 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 ASP.NET 폴더 추가를 클릭한 다음 App_Code를 클릭합니다.

  2. App_Code 폴더를 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.

  3. 설치된 템플릿에서 LINQ to SQL 클래스 템플릿을 선택하고 파일 이름을 Reviews.dbml로 바꾼 다음 추가를 클릭합니다.

    이름이 Reviews.dbml인 LINQ to SQL 항목 추가

    개체 관계형 디자이너가 표시됩니다.

  4. 서버 탐색기에서 MovieReviews 테이블을 개체 관계형 디자이너 창으로 끕니다.

    MovieReviews 테이블과 해당 열이 디자이너 창에서 MovieReview라는 엔터티로 나타납니다.

    개체 관계형 디자이너에서 새 테이블 검토

  5. Reviews.dbml 파일을 저장합니다.

  6. 솔루션 탐색기에서 Reviews.designer.cs 또는 Reviews.designer.vb 파일을 엽니다.

    이제 해당 파일에 ReviewsDataContext 및 MovieReview의 클래스가 있습니다. ReviewsDataContext 클래스는 데이터베이스를 나타내고 MovieReview 클래스는 데이터베이스 테이블을 나타냅니다. ReviewsDataContext 클래스의 매개 변수가 없는 생성자는 Web.config 파일에서 연결 문자열을 읽습니다.

  7. Web.config 파일을 엽니다.

    연결 문자열이 connectionStrings 요소에 추가되었습니다.

  8. 클래스 파일과 Web.config 파일을 닫습니다.

LinqDataSource 컨트롤 만들기 및 구성

이제 데이터베이스 엔터티를 나타내는 데이터베이스 테이블 및 클래스가 있으므로 ASP.NET 웹 페이지에서 LinqDataSource 컨트롤을 사용하여 데이터를 관리할 수 있습니다.

LinqDataSource 컨트롤을 만들고 구성하려면

  1. Visual Studio에서 새 ASP.NET 웹 페이지를 만들고 디자인 뷰로 전환합니다.

  2. 도구 상자의 데이터 탭에서 LinqDataSource 컨트롤을 끌어 웹 페이지의 form 요소 안에 놓습니다.

    ID 속성은 LinqDataSource1로 둘 수 있습니다.

    LinqDataSource 컨트롤을 디자인 창에 추가

  3. ContextTypeName 속성을 ReviewsDataContext로 설정합니다.

  4. TableName 속성을 MovieReviews로 설정합니다.

  5. AutoPage를 true로 설정하고 소스 뷰로 전환합니다.

    다음 예제에서는 LinqDataSource 컨트롤의 선언적 태그를 보여 줍니다.

    <asp:LinqDataSource 
      ContextTypeName="ReviewsDataContext" 
      TableName="MovieReviews" 
      AutoPage="true" 
      ID="LinqDataSource1" 
      >
    </asp:LinqDataSource>
    

    데이터를 선택하기 위해 데이터베이스 명령을 지정할 필요가 없었습니다.

데이터를 표시하기 위한 컨트롤 추가

이제 DetailsView 컨트롤을 추가하고 이를 LinqDataSource 컨트롤에 바인딩할 수 있습니다. 사용자는 DetailsView 컨트롤을 사용하여 LinqDataSource 컨트롤에 의해 관리되는 데이터를 볼 수 있습니다.

LinqDataSource의 데이터를 DetailsView에 연결하려면

  1. 도구 상자의 데이터 탭에서 DetailsView 컨트롤을 두 번 클릭하여 페이지에 추가합니다.

    ID 속성은 DetailsView1로 둘 수 있습니다.

  2. DataSourceID 속성을 LinqDataSource1로 설정합니다.

  3. DataKeyNames 속성을 MovieID로 설정합니다.

  4. AllowPaging를 true로 설정합니다.

    다음 예제에서는 DetailsView 컨트롤의 선언적 태그를 보여 줍니다.

    <asp:DetailsView 
      DataSourceID="LinqDataSource1" 
      DataKeyNames="MovieID" 
      AllowPaging="true" 
      ID="DetailsView1" 
      >
    </asp:DetailsView>
    
  5. 변경 내용을 저장하고 Ctrl+F5를 눌러 브라우저에서 페이지를 봅니다.

    DetailsView 컨트롤은 MovieReviews 테이블의 현재 레코드에 대한 값을 표시합니다. DetailsView 컨트롤은 자동으로 웹 컨트롤을 만들어 데이터베이스 테이블의 각 열을 표시합니다.

사용자가 데이터를 업데이트, 삽입 및 삭제할 수 있도록 허용

LinqDataSource 컨트롤은 데이터 업데이트, 삽입 및 삭제 명령을 만들 수 있습니다.

업데이트, 삽입 및 삭제 작업을 허용하려면

  1. LinqDataSource 컨트롤에서 EnableUpdate, EnableInsertEnableDelete 속성을 true로 설정합니다.

    다음 예제에서는 LinqDataSource 컨트롤의 선언적 태그를 보여 줍니다.

    <asp:LinqDataSource 
      ContextTypeName="ReviewsDataContext" 
      TableName="MovieReviews" 
      AutoPage="true" 
      EnableUpdate="true" 
      EnableInsert="true" 
      EnableDelete="true" 
      ID="LinqDataSource1" 
      >
    </asp:LinqDataSource>
    
  2. DetailsView 컨트롤에서 AutoGenerateEditButton, AutoGenerateInsertButtonAutoGenerateDeleteButton 속성을 true로 설정합니다.

  3. DetailsView 컨트롤에 표시되는 필드를 제한하고 필드의 순서를 설정하려면 AutoGenerateRows 속성을 false로 설정합니다.

  4. Title, Theater, Rating 및 Review 열의 필드를 추가하고 이러한 필드를 해당 데이터 필드에 바인딩합니다.

    다음 예제에서는 DetailsView 컨트롤의 선언적 태그를 보여 줍니다.

    <asp:DetailsView 
      DataSourceID="LinqDataSource1" 
      DataKeyNames="MovieID" 
      AutoGenerateRows="false" 
      AutoGenerateEditButton="true"
      AutoGenerateInsertButton="true"
      AutoGenerateDeleteButton="true"
      AllowPaging="true" 
      ID="DetailsView1" 
      >
      <Fields>
        <asp:BoundField HeaderText="Title" DataField="Title" />
        <asp:BoundField HeaderText="Theater" DataField="Theater" />
        <asp:BoundField HeaderText="Number of Stars" DataField="Score" />
        <asp:BoundField HeaderText="Review" DataField="Review" />
      </Fields>
    </asp:DetailsView>
    

    MovieID 열이 다른 열과 함께 데이터 소스에서 선택됩니다. 그러나 해당 열은 DetailsView 컨트롤에 표시되지 않으며 사용자가 해당 값을 수정할 수 없습니다. MovieID 속성을 선택해야 LinqDataSource 컨트롤이 데이터 업데이트, 삽입 및 삭제 명령을 자동으로 만듭니다.

    이러한 데이터 작업을 위해 명령을 지정할 필요가 없었습니다.

  5. 변경 내용을 저장하고 Ctrl+F5를 눌러 브라우저에서 페이지를 봅니다.

    DetailsView 컨트롤은 MovieReviews 테이블의 현재 레코드에 대한 필드를 표시합니다. DetailsView 컨트롤에서 해당하는 단추를 클릭하여 레코드를 업데이트, 삽입 및 삭제할 수 있습니다.

다음 단계

이 연습에서는 LinqDataSource 컨트롤을 사용하여 레코드를 업데이트, 삽입 및 삭제하는 기본 기능을 보여 주었습니다. LinqDataSource 컨트롤의 추가 기능을 배우려면 다음 작업을 수행할 수 있습니다.

참고 항목

개념

LinqDataSource 웹 서버 컨트롤 개요