다음을 통해 공유


.NET Framework 애플리케이션의 데이터베이스(여러 테이블)에 데이터 저장

비고

클래스 및 관련 클래스는 DataSet 2000년대 초반의 레거시 .NET Framework 기술로, 애플리케이션이 데이터베이스와 연결이 끊긴 동안 애플리케이션이 메모리의 데이터로 작업할 수 있도록 합니다. 이 기술은 사용자가 데이터를 수정하고 변경 내용을 데이터베이스에 다시 유지할 수 있도록 하는 앱에 특히 유용합니다. 데이터 세트는 입증된 성공적인 기술이지만 새 .NET 애플리케이션에 권장되는 방법은 Entity Framework Core를 사용하는 것입니다. Entity Framework는 테이블 형식 데이터를 개체 모델로 사용하는 보다 자연스러운 방법을 제공하며 더 간단한 프로그래밍 인터페이스를 제공합니다.

애플리케이션 개발에서 가장 일반적인 시나리오 중 하나는 Windows 애플리케이션의 양식에 데이터를 표시하고, 데이터를 편집하고, 업데이트된 데이터를 데이터베이스로 다시 보내는 것입니다. 이 연습에서는 두 관련 테이블의 데이터를 표시하는 폼을 만들고 레코드를 편집하고 변경 내용을 데이터베이스에 다시 저장하는 방법을 보여 줍니다. 이 예제에서는 Northwind 샘플 데이터베이스의 Customers 테이블과 Orders 테이블을 사용합니다.

TableAdapter의 메서드를 호출 Update 하여 애플리케이션의 데이터를 데이터베이스에 다시 저장할 수 있습니다. 데이터 원본 창에서 폼으로 테이블을 끌면 데이터를 저장하는 데 필요한 코드가 자동으로 추가됩니다. 양식에 추가된 모든 추가 테이블에는 이 코드를 수동으로 추가해야 합니다. 이 연습에서는 둘 이상의 테이블에서 업데이트를 저장하는 코드를 추가하는 방법을 보여 줍니다.

이 연습에서 설명하는 작업은 다음과 같습니다.

  • 데이터 원본 구성 마법사를 사용하여 애플리케이션에서 데이터 원본을 만들고 구성합니다.

  • 데이터 원본 창에서 항목의 컨트롤을 설정합니다. 자세한 내용은 데이터 원본 창에서 끌 때 만들 컨트롤 설정을 참조하세요.

  • 데이터 원본 창에서 항목을 폼으로 끌어 데이터 바인딩된 컨트롤을 만듭니다.

  • 데이터 세트의 각 테이블에서 몇 가지 레코드 수정

  • 데이터 세트의 업데이트된 데이터를 데이터베이스로 다시 보내도록 코드를 수정합니다.

필수 조건

이 자습서를 완료하려면 Visual Studio에 설치된 .NET 데스크톱 개발및 데이터 스토리지 및 처리 워크로드가 필요합니다. 설치하려면 Visual Studio 설치 관리자 열고 수정하려는 Visual Studio 버전 옆에 있는 수정(또는 추가>수정)을 선택합니다. 을(를) 참조하여 Visual Studio을(를) 수정하세요.

이 연습에서는 SQL Server Express LocalDB 및 Northwind 샘플 데이터베이스를 사용합니다.

  1. SQL Server Express LocalDB가 없는 경우 SQL Server Express 다운로드 페이지 또는 Visual Studio 설치 관리자를 통해 설치합니다. Visual Studio 인스톨러에서 SQL Server Express LocalDB를 데이터 저장 및 처리 워크로드의 일부로 또는 개별 구성 요소로 설치할 수 있습니다.

  2. 다음 단계에 따라 Northwind 샘플 데이터베이스를 설치합니다.

    1. Visual Studio에서 SQL Server 개체 탐색기 창을 엽니다. (SQL Server 개체 탐색기는 Visual Studio 설치 관리자에서 데이터 스토리지 및 처리 워크로드의 일부로 설치됩니다.) SQL Server 노드를 확장합니다. LocalDB 인스턴스를 마우스 오른쪽 단추로 클릭하고 새 쿼리 선택합니다.

      쿼리 편집기 창이 열립니다.

    2. Northwind Transact-SQL 스크립트를 클립보드에 복사합니다. 이 T-SQL 스크립트는 Northwind 데이터베이스를 처음부터 만들고 데이터로 채웁니다.

    3. T-SQL 스크립트를 쿼리 편집기에 붙여넣은 다음 실행 단추를 선택합니다.

      잠시 후 쿼리 실행이 완료되고 Northwind 데이터베이스가 만들어집니다.

Windows Forms 애플리케이션 만들기

C# 또는 Visual Basic에 대한 새 Windows Forms 앱 프로젝트를 만듭니다. 프로젝트 이름을 UpdateMultipleTablesWalkthrough로 지정합니다.

데이터 원본 만들기

이 단계에서는 데이터 원본 구성 마법사를 사용하여 Northwind 데이터베이스에서 데이터 원본을 만듭니다. 연결을 만들려면 Northwind 샘플 데이터베이스에 액세스할 수 있어야 합니다. Northwind 샘플 데이터베이스 설정에 대한 자세한 내용은 방법: 샘플 데이터베이스 설치를 참조하세요.

  1. 데이터 메뉴에서 데이터 원본 표시를 선택합니다.

    데이터 원본 창이 열립니다.

  2. 데이터 원본 창에서 새 데이터 원본 추가를 선택하여 데이터 원본 구성 마법사를 시작합니다.

  3. 데이터 원본 유형 선택 화면에서 데이터베이스를 선택한 다음, 다음을 선택합니다.

  4. 데이터 연결 선택 화면에서 다음 중 하나를 수행합니다.

    • Northwind 샘플 데이터베이스에 대한 데이터 연결을 드롭다운 목록에서 사용할 수 있는 경우 선택합니다.

      -또는-

    • 새 연결을 선택하여 연결 추가/수정 대화 상자를 엽니다.

  5. 데이터베이스에 암호가 필요한 경우 중요한 데이터를 포함하는 옵션을 선택하고 다음을 선택합니다.

  6. 애플리케이션 구성 파일에 연결 문자열 저장에서다음을 선택합니다.

  7. 데이터베이스 개체 선택 화면에서 테이블 노드를 확장합니다.

  8. 고객주문 테이블을 선택한 다음 마침을 선택합니다.

    NorthwindDataSet이 프로젝트에 추가되고 테이블이 데이터 원본 창에 표시됩니다.

생성할 컨트롤 설정

이 연습에서는 테이블의 Customers 데이터가 개별 컨트롤에 표시되는 세부 정보 레이아웃에 있습니다. Orders 테이블의 데이터는 그리드 레이아웃으로 DataGridView 컨트롤에서 표시됩니다.

데이터 원본 창의 항목에 대한 드롭 유형을 설정하려면

  1. 데이터 원본 창에서 고객 노드를 확장합니다.

  2. 고객 노드의 컨트롤 목록에서 세부 정보를 선택하여 Customers 테이블의 컨트롤을 개별 컨트롤로 변경합니다. 자세한 내용은 데이터 원본 창에서 끌 때 만들 컨트롤 설정을 참조하세요.

데이터 바인딩된 양식 만들기

데이터 원본 창에서 항목을 폼으로 끌어와서 데이터 바인딩된 컨트롤을 만들 수 있습니다.

  1. 데이터 원본 창에서 Form1로 기본 고객 노드를 끕니다.

    설명 레이블이 있는 데이터 바인딩된 컨트롤은 레코드 탐색을 위한 도구 모음(BindingNavigator)과 함께 폼에 표시됩니다. NorthwindDataSet , CustomersTableAdapterBindingSourceBindingNavigator 구성 요소 트레이에 나타납니다.

  2. 데이터 원본 창에서 Form1로 관련 주문 노드를 끕니다.

    비고

    관련 주문 노드는 팩스 열 아래에 있으며 고객 노드의 자식 노드입니다.

    DataGridView 레코드 탐색을 위한 컨트롤 및 도구 모음(BindingNavigator)이 폼에 나타납니다. OrdersTableAdapterBindingSource이/가 구성 요소 트레이에 표시됩니다.

데이터베이스를 업데이트하는 코드 추가

Customers and Orders TableAdapters의 메서드를 호출 Update 하여 데이터베이스를 업데이트할 수 있습니다. 기본적으로 저장 단추에BindingNavigator 대한 이벤트 처리기가 폼의 코드에 추가되어 데이터베이스에 업데이트를 보냅니다. 이 절차는 올바른 순서로 업데이트를 보내도록 코드를 수정합니다. 이렇게 하면 참조 무결성 오류가 발생할 가능성이 없습니다. 또한 이 코드는 try-catch 블록에서 업데이트 호출을 래핑하여 오류 처리를 구현합니다. 애플리케이션의 요구에 맞게 코드를 수정할 수 있습니다.

비고

명확성을 위해 이 안내에서는 트랜잭션을 사용하지 않습니다. 그러나 둘 이상의 관련 테이블을 업데이트하는 경우 트랜잭션 내의 모든 업데이트 논리를 포함합니다. 트랜잭션은 변경 내용이 커밋되기 전에 데이터베이스에 대한 모든 관련 변경이 성공하도록 보장하는 프로세스입니다. 자세한 내용은 트랜잭션 및 동시성을 참조하세요.

애플리케이션에 업데이트 논리를 추가하려면

  1. 에서 저장 단추를 BindingNavigator선택합니다. 이렇게 하면 코드 편집기가 bindingNavigatorSaveItem_Click 이벤트 처리기에 열립니다.

  2. 이벤트 처리기의 코드를 바꿔 관련 TableAdapters의 Update 메서드를 호출합니다. 다음 코드는 먼저 각각 DataRowState (DeletedAddedModified)에 대한 업데이트된 정보를 보관하는 세 개의 임시 데이터 테이블을 만듭니다. 업데이트는 올바른 순서로 실행됩니다. 코드는 다음과 같습니다.

    this.Validate();
    this.ordersBindingSource.EndEdit();
    this.customersBindingSource.EndEdit();
    
    NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable)
        northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
    NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable)
        northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
    NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable)
        northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
    try
    {
        // Remove all deleted orders from the Orders table.
        if (deletedOrders != null)
        {
            ordersTableAdapter.Update(deletedOrders);
        }
    
        // Update the Customers table.
        customersTableAdapter.Update(northwindDataSet.Customers);
    
        // Add new orders to the Orders table.
        if (newOrders != null)
        {
            ordersTableAdapter.Update(newOrders);
        }
    
        // Update all modified Orders.
        if (modifiedOrders != null)
        {
            ordersTableAdapter.Update(modifiedOrders);
        }
    
        northwindDataSet.AcceptChanges();
    }
    
    catch (System.Exception ex)
    {
        MessageBox.Show("Update failed");
    }
    
    finally
    {
        if (deletedOrders != null)
        {
            deletedOrders.Dispose();
        }
        if (newOrders != null)
        {
            newOrders.Dispose();
        }
        if (modifiedOrders != null)
        {
            modifiedOrders.Dispose();
        }
    }
    

애플리케이션 테스트

  1. F5키를 누릅니다.

  2. 각 테이블에 있는 하나 이상의 레코드 데이터를 일부 변경합니다.

  3. 저장 단추를 선택합니다.

  4. 데이터베이스의 값을 확인하여 변경 내용이 저장되었는지 확인합니다.