TableAdapter 개요

TableAdapter는 응용 프로그램과 데이터베이스 간의 통신을 제공합니다. 구체적으로 말하자면 TableAdapter는 데이터베이스에 연결하여 쿼리나 저장 프로시저를 실행하고 반환된 데이터로 채워진 데이터 테이블을 반환하거나 기존 DataTable을 반환된 데이터로 채웁니다. TableAdapter는 또한 응용 프로그램의 업데이트된 데이터를 다시 데이터베이스로 보내는 데 사용되기도 합니다.

이전 버전의 Visual Studio 사용자는 TableAdapter를 기본 제공 연결 개체가 있고 여러 쿼리를 포함할 수 있는 DataAdapter로 간주할 수 있습니다. TableAdapter에 추가된 각 쿼리는 개체의 다른 메서드나 함수처럼 간단히 호출되는 공용 메서드로 노출됩니다.

DataAdapter의 표준 기능 이외에 TableAdapter는 연결된 형식화된 DataTable과 공통 스키마를 공유하는 쿼리를 캡슐화하는 형식화된 메서드를 추가로 제공합니다. 즉, 각 쿼리가 동일한 스키마를 갖는 데이터를 반환하기만 하면 TableAdapter에 대한 쿼리를 원하는 만큼 정의할 수 있습니다.

이전 버전의 Visual Studio에서는 응용 프로그램과 데이터베이스 간의 통신에 ADO.NET 데이터 어댑터를 사용했습니다. 데이터 어댑터는 지금도 .NET Framework 데이터 공급자(ADO.NET)의 주요 구성 요소이지만 DataAdapter의 기능을 향상시키기 위해 디자이너에서 생성한 구성 요소인 TableAdapter가 새롭게 사용됩니다. 일반적으로 TableAdapter에는 데이터베이스의 데이터를 페치하고 업데이트하기 위한 Fill 및 Update 메서드가 있습니다.

TableAdapter는 데이터 집합 디자이너를 통해 강력한 형식의 데이터 집합 내에 만들어집니다. 데이터 소스 구성 마법사를 사용하여 새 데이터 집합을 만드는 동안 TableAdapter를 만들 수 있습니다. TableAdapter 구성 마법사를 사용하여 기존 데이터 집합에서 TableAdapter를 만들거나 서버 탐색기에서 데이터 집합 디자이너로 데이터베이스 개체를 끌어 와 TableAdapter를 만들 수도 있습니다. 자세한 내용은 방법: TableAdapter 만들기를 참조하십시오.

TableAdapter는 데이터 집합 디자이너를 사용하여 디자인되지만 생성되는 TableAdapter 클래스는 DataSet의 중첩 클래스로 생성되지 않고 각 데이터 집합의 개별 네임스페이스에 저장됩니다. 예를 들어, NorthwindDataSet이라는 데이터 집합이 있으면 NorthwindDataSet의 DataTable에 연결된 TableAdapter는 NorthwindDataSetTableAdapters 네임스페이스에 있게 됩니다. 프로그래밍 방식으로 특정 TableAdapter에 액세스하려면 TableAdapter의 새 인스턴스를 선언해야 합니다. 예를 들면 다음과 같습니다.

Dim northwindDataSet As New NorthwindDataSet()
Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()

customersTableAdapter.Fill(northwindDataSet.Customers)
NorthwindDataSet northwindDataSet = new NorthwindDataSet();

NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = 
    new NorthwindDataSetTableAdapters.CustomersTableAdapter();

customersTableAdapter.Fill(northwindDataSet.Customers);

연결된 DataTable 스키마

TableAdapter를 만들 때 TableAdapter에 연결된 DataTable의 스키마를 정의하는 데 초기 쿼리나 저장 프로시저가 사용됩니다. 이 초기 쿼리나 저장 프로시저를 실행하려면 TableAdapter의 주 Fill 메서드(TableAdapter에 연결된 DataTable을 채움)를 호출합니다. TableAdapter의 주 쿼리가 변경되면 연결된 데이터 테이블의 스키마에 반영됩니다. 예를 들어, 주 쿼리에서 열이 제거되면 연결된 데이터 테이블에서 해당 열이 제거됩니다. TableAdapter의 추가 쿼리에서 주 쿼리에 없는 열을 반환하는 SQL 문을 사용하면 디자이너에서는 주 쿼리와 추가 쿼리 사이의 열 변경을 동기화하려고 시도합니다. 자세한 내용은 방법: TableAdapter 편집을 참조하십시오.

TableAdapter 업데이트 명령

TableAdapter의 업데이트 기능은 TableAdapter 마법사에서 제공되는 주 쿼리를 기반으로 얼마나 많은 정보를 사용할 수 있는지에 따라 달라집니다. 예를 들어, 여러 테이블(JOIN), 스칼라 값, 뷰 또는 집계 함수의 결과에서 값을 페치하도록 구성된 TableAdapter는 업데이트된 내용을 다시 내부 데이터베이스로 보내는 기능이 처음부터 포함되어 있지 않습니다. 그러나 속성 창에서 수동으로 INSERT, UPDATE 및 DELETE 명령을 구성할 수 있습니다.

TableAdapter 쿼리

쿼리가 여러 개 포함된 TableAdapter

표준 데이터 어댑터와 달리 TableAdapter는 연결된 데이터 테이블을 채우는 쿼리를 여러 개 포함할 수 있습니다. 각 쿼리가 해당 쿼리에 연결된 데이터 테이블과 동일한 스키마를 갖는 데이터를 반환하기만 하면 TableAdapter에 대해 응용 프로그램에 필요한 만큼의 쿼리를 정의할 수 있습니다. 이렇게 하면 서로 다른 기준을 만족시키는 데이터를 로드할 수 있습니다. 예를 들어, 응용 프로그램에 고객 테이블이 포함되어 있으면 이름이 특정 문자로 시작하는 모든 고객으로 테이블을 채우는 쿼리와 같은 상태에 있는 모든 고객으로 테이블을 채우는 또 다른 쿼리를 만들 수 있습니다. 예를 들어, 지정된 상태에 있는 고객으로 Customers 테이블을 채우려면 상태 값에 대한 매개 변수를 사용하는 FillByState 쿼리(SELECT * FROM Customers WHERE State = @State)를 만들면 됩니다. 이 경우 FillByState 메서드를 호출하고 매개 변수 값을 전달(CustomerTableAdapter.FillByState("WA"))하여 쿼리를 실행합니다. 자세한 내용은 방법: TableAdapter 쿼리 만들기를 참조하십시오.

TableAdapter의 데이터 테이블과 동일한 스키마를 갖는 데이터를 반환하는 쿼리 이외에 스칼라(단일) 값을 반환하는 쿼리를 추가할 수 있습니다. 예를 들어, 고객 수를 반환하는 쿼리(SELECT Count(*) From Customers)는 반환되는 데이터가 테이블의 스키마를 따르지 않더라도 CustomersTableAdapter에 유효한 쿼리입니다.

ClearBeforeFill 속성

TableAdapter에는 기본 DataAdapter 클래스에서 사용할 수 없는 속성이 추가됩니다. 기본적으로 TableAdapter의 데이터 테이블을 채우는 쿼리를 실행할 때마다 데이터가 지워지고 쿼리 결과만 테이블에 로드됩니다. 쿼리에서 반환된 데이터를 데이터 테이블의 기존 데이터에 추가하거나 병합하려면 TableAdapter의 ClearBeforeFill 속성을 false로 설정합니다. 데이터를 지우는지 여부에 상관없이 원하는 경우 업데이트된 내용을 명시적으로 다시 데이터베이스에 보내야 합니다. 따라서 테이블을 채우는 다른 쿼리를 실행하기 전에 테이블의 데이터 변경 내용을 저장해야 합니다. 자세한 내용은 방법: TableAdapter를 사용하여 데이터 업데이트를 참조하십시오.

TableAdapter 상속

TableAdapter는 구성된 DataAdapter를 캡슐화하여 표준 데이터 어댑터의 기능을 확장합니다. 기본적으로 TableAdapter는 Component에서 상속되며 DataAdapter 클래스로 캐스팅할 수 없습니다. TableAdapter를 DataAdapter로 캐스팅하면 InvalidCastException이 발생합니다. TableAdapter의 기본 클래스를 변경하려면 데이터 집합 디자이너에서 TableAdapter의 기본 클래스 속성에 Component에서 파생되는 클래스를 입력합니다.

TableAdapter 메서드 및 속성

TableAdapter 클래스는 .NET Framework의 일부가 아니므로 해당 설명서나 개체 브라우저에서 찾을 수 없습니다. 이 클래스는 위에서 언급한 마법사 중 하나를 사용할 경우 디자인 타임에 만들어집니다. TableAdapter를 만들 때 TableAdapter에 지정되는 이름은 작업 중인 테이블의 이름을 기반으로 합니다. 예를 들어, Orders라는 데이터베이스의 테이블을 기반으로 TableAdapter를 만들면 TableAdapter의 이름은 OrdersTableAdapter가 됩니다. TableAdapter의 클래스 이름은 데이터 집합 디자이너이름 속성을 사용하여 변경할 수 있습니다.

일반적으로 사용되는 TableAdapter의 메서드와 속성은 다음과 같습니다.

멤버

설명

TableAdapter.Fill

TableAdapter에 연결된 데이터 테이블을 TableAdapter의 SELECT 명령에 대한 결과로 채웁니다. 자세한 내용은 방법: 데이터 집합을 데이터로 채우기를 참조하십시오.

TableAdapter.Update

변경 내용을 데이터베이스로 다시 보내고 업데이트로 변경된 행 수를 나타내는 정수를 반환합니다. 자세한 내용은 방법: TableAdapter를 사용하여 데이터 업데이트를 참조하십시오.

TableAdapter.GetData

데이터로 채워진 새 DataTable을 반환합니다.

TableAdapter.Insert

데이터 테이블에 새 행을 만듭니다. 자세한 내용은 방법: DataTable에 행 추가를 참조하십시오.

TableAdapter.ClearBeforeFill

Fill 메서드 중 하나를 호출하기 전에 데이터 테이블이 비어 있는지 여부를 확인합니다.

TableAdapter Update 메서드

TableAdapter는 데이터 명령을 사용하여 데이터베이스에서 읽고 씁니다. TableAdapter의 초기 Fill(주) 쿼리는 TableAdapter.Update 메서드와 관련된 InsertCommand, UpdateCommand 및 DeleteCommand 명령뿐 아니라 연결된 데이터 테이블의 스키마를 만드는 기초로 사용됩니다. 즉, TableAdapter의 Update 메서드를 호출하면 TableAdapter가 원래 구성될 때 만들어진 문을 실행하고 TableAdapter 쿼리 구성 마법사를 사용하여 추가한 쿼리의 문은 실행하지 않습니다.

TableAdapter를 사용하면 일반적으로 수행하는 명령을 사용할 때와 동일한 작업을 효과적으로 수행할 수 있습니다. 예를 들어, 어댑터의 Fill 메서드를 호출하면 어댑터에서는 SelectCommand 속성에 있는 데이터 명령을 실행하고 데이터 읽기(예: SqlDataReader)를 사용하여 결과 집합을 지정된 데이터 테이블에 로드합니다. 마찬가지로, 어댑터의 Update 메서드를 호출하면 데이터 테이블의 변경된 레코드 각각에 대해 UpdateCommand, InsertCommand 및 DeleteCommand 속성에 있는 적절한 명령을 실행합니다.

참고

주 쿼리에 정보가 충분하면 TableAdapter가 생성될 때 기본적으로 InsertCommand, UpdateCommand 및 DeleteCommand 명령이 만들어집니다. TableAdapter의 주 쿼리가 단일 테이블의 SELECT 문보다 복잡할 경우 디자이너에서 InsertCommand, UpdateCommand 및 DeleteCommand를 생성할 수 없게 됩니다. 이러한 명령이 생성되지 않으면 TableAdapter.Update 메서드를 실행할 때 오류가 발생할 수 있습니다.

TableAdapter GenerateDbDirectMethods

InsertCommand, UpdateCommand 및 DeleteCommand 이외에도 데이터베이스에 대해 직접 실행할 수 있는 메서드를 가진 TableAdapter를 만들 수 있습니다. 이러한 메서드(TableAdapter.Insert, TableAdapter.Update 및 TableAdapter.Delete)는 직접 호출하여 데이터베이스의 데이터를 조작할 수 있습니다. 즉, 코드에서 TableAdapter.Update를 호출하는 대신 이러한 개별 메서드를 호출하여 연결된 데이터 테이블에 대해 대기 중인 insert, update 및 delete를 처리할 수 있습니다.

이러한 직접 메서드를 만들지 않으려면 속성 창에서 TableAdapter의 GenerateDbDirectMethods 속성을 false로 설정합니다. TableAdapter에 추가된 다른 쿼리는 독립 실행형 쿼리이므로 이러한 메서드를 생성하지 않습니다.

TableAdapter의 Null 허용 형식 지원

TableAdapter는 null 허용 형식 Nullable(Of T) 및 T?를 지원합니다. Visual Basic의 null 허용 형식에 대한 자세한 내용은 Nullable 값 형식(Visual Basic)을 참조하십시오. C#의 null 허용 형식에 대한 자세한 내용은 Nullable 형식 사용(C# 프로그래밍 가이드)을 참조하십시오.

참고 항목

작업

방법: 데이터베이스의 데이터에 연결

연습: 데이터베이스의 데이터에 연결(Windows Forms)

개념

데이터 응용 프로그램 개발의 새로운 기능

Visual Studio에서 데이터에 컨트롤 바인딩

기타 리소스

데이터 연습

데이터를 받기 위해 응용 프로그램 준비

데이터를 응용 프로그램으로 페치

응용 프로그램에서 데이터 편집

데이터 유효성 검사

데이터 저장