다음을 통해 공유


DataSet에 기존 제약 조건 추가(ADO.NET)

업데이트: November 2007

DataAdapterFill 메서드는 데이터 소스의 테이블 열과 행으로만 DataSet을 채웁니다. 제약 조건은 일반적으로 데이터 소스에서 설정하지만 Fill 메서드는 기본적으로 이 스키마 정보를 DataSet에 추가하지 않습니다. 데이터 소스의 기존 기본 키 제약 조건 정보로 DataSet을 채우려면 DataAdapterFillSchema 메서드를 호출하거나 Fill을 호출하기 전에 DataAdapterMissingSchemaAction 속성을 AddWithKey로 설정합니다. 이렇게 하면 DataSet의 기본 키 제약 조건이 데이터 소스의 해당 제약 조건을 반영합니다. 외래 키 제약 조건 정보는 포함되지 않으므로 DataTable 제약 조건(ADO.NET)에 나와 있는 대로 명시적으로 만들어야 합니다.

DataSet을 데이터로 채우기 전에 스키마 정보를 추가하면 기본 키 제약 조건이 DataTable 개체와 함께 DataSet에 포함됩니다. 결과적으로 DataSet의 Fill에 대한 추가 호출이 있으면 기본 키 열 정보를 사용하여 데이터 소스의 새 행을 각 DataTable의 현재 행과 일치시키고 해당 테이블의 현재 데이터를 데이터 소스의 데이터로 덮어씁니다. 스키마 정보가 없으면 데이터 소스의 새 행이 DataSet에 추가되어 결국 행이 중복됩니다.

참고:

데이터 소스의 열이 자동 증분 열로 식별되면 FillSchema 메서드 또는 AddWithKeyMissingSchemaAction 속성이 있는 Fill 메서드는 AutoIncrement 속성이 true로 설정된 DataColumn을 만듭니다. 그러나 AutoIncrementStepAutoIncrementSeed 값은 직접 설정해야 합니다. 자동 증분 열에 대한 자세한 내용은 AutoIncrement 열 만들기(ADO.NET)를 참조하십시오.

FillSchema를 사용하거나 MissingSchemaActionAddWithKey로 설정하려면 기본 키 열 정보를 확인하기 위해 데이터 소스에서 추가 처리를 수행해야 합니다. 이러한 추가 처리로 인해 성능이 낮아질 수 있습니다. 디자인 타임에 기본 키 정보를 알고 있으면 기본 키 열을 명시적으로 지정하여 최상의 성능을 얻을 수 있습니다. 테이블의 기본 키 정보를 명시적으로 설정하는 방법은 기본 키 정의(ADO.NET)를 참조하십시오.

다음 코드 예제에서는 FillSchema를 사용하여 스키마 정보를 DataSet에 추가하는 방법을 보여 줍니다.

Dim custDataSet As DataSet = New DataSet()

custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")
custAdapter.Fill(custDataSet, "Customers")
DataSet custDataSet = new DataSet();

custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");
custAdapter.Fill(custDataSet, "Customers");

다음 코드 예제에서는 Fill 메서드의 MissingSchemaAction.AddWithKey 속성을 사용하여 스키마 정보를 DataSet에 추가하는 방법을 보여 줍니다.

Dim custDataSet As DataSet = New DataSet()

custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
custAdapter.Fill(custDataSet, "Customers")
DataSet custDataSet = new DataSet();

custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custAdapter.Fill(custDataSet, "Customers");

여러 개의 결과 집합 처리

DataAdapterSelectCommand에서 반환된 여러 개의 결과 집합이 발생하면 DataSet에 여러 개의 테이블을 만듭니다. 테이블에는 0부터 시작하되 "Table0"이 아니라 Table로 시작하는 증분 기본 이름 TableN이 지정됩니다. 테이블 이름이 FillSchema 메서드에 인수로 전달되는 경우 테이블에는 0부터 시작하되 "TableName0"이 아니라 TableName으로 시작하는 증분 기본 이름 TableNameN이 지정됩니다.

참고:

여러 결과 집합을 반환하는 명령에 대해 OleDbDataAdapter 개체의 FillSchema 메서드가 호출되면 첫째 결과 집합의 스키마 정보만 반환됩니다. OleDbDataAdapter를 사용하여 여러 결과 집합에 대한 스키마 정보를 반환할 경우 AddWithKeyMissingSchemaAction을 지정하고 Fill 메서드를 호출할 때 스키마 정보를 가져오는 것이 좋습니다.

참고 항목

기타 리소스

DataAdapters 및 DataReaders(ADO.NET)

DataSets, DataTables 및 DataViews(ADO.NET)

ADO.NET에서 데이터 검색 및 수정