OdbcDataReader.GetSchemaTable 메서드

정의

DataTable의 열 메타데이터를 정의하는 OdbcDataReader을 반환합니다.

public:
 override System::Data::DataTable ^ GetSchemaTable();
public:
 virtual System::Data::DataTable ^ GetSchemaTable();
public override System.Data.DataTable GetSchemaTable ();
public override System.Data.DataTable? GetSchemaTable ();
public System.Data.DataTable GetSchemaTable ();
override this.GetSchemaTable : unit -> System.Data.DataTable
abstract member GetSchemaTable : unit -> System.Data.DataTable
override this.GetSchemaTable : unit -> System.Data.DataTable
Public Overrides Function GetSchemaTable () As DataTable
Public Function GetSchemaTable () As DataTable

반환

열 메타데이터를 정의하는 DataTable입니다.

구현

예외

설명

메서드는 GetSchemaTable 각 열에 대한 메타데이터를 다음 순서로 반환합니다.

DataReader 열 Description
ColumnName 열의 이름 이 고유 하지 않을 수도 있습니다. 열 이름을 확인할 수 없는 경우 null 값이 반환됩니다. 이 이름은 항상 현재 보기 또는 명령 텍스트에서 열의 가장 최근 이름을 반영합니다.
ColumnOrdinal 열의 0부터 시작하는 서수입니다. 이 열에 null 값을 포함할 수 없습니다.
ColumnSize 열 값의 최대 길이로서 고정 길이 데이터 형식을 사용하는 열의 경우 데이터 형식의 크기입니다.
NumericPrecision 가 숫자 데이터 형식인 경우 DbType 열의 최대 정밀도입니다. 전체 자릿수는 열의 정의에 따라 달라집니다. 가 숫자 데이터 형식이 아닌 경우 DbType 이 열의 데이터를 사용하지 마세요. 기본 ODBC 드라이버가 숫자가 아닌 데이터 형식의 전체 자릿수 값을 반환하는 경우 이 값은 스키마 테이블에서 사용됩니다.
NumericScale 가 이DecimalDbType 소수점 오른쪽에 있는 숫자 수입니다. 그렇지 않으면 null 값입니다. 기본 ODBC 드라이버가 숫자가 아닌 데이터 형식의 전체 자릿수 값을 반환하는 경우 이 값은 스키마 테이블에서 사용됩니다.
DataType 의 공용 언어 런타임 형식에 DbType매핑됩니다.
ProviderType 기본 드라이버 유형입니다.
IsLong true 열에 매우 긴 데이터가 포함된 BLOB(Binary Long Object)이 포함되어 있으면 입니다. 매우 긴 데이터의 정의는 드라이버별로 다릅니다.
AllowDBNull true 소비자가 열을 null 값으로 설정할 수 있거나 드라이버가 소비자가 열을 null 값으로 설정할 수 있는지 여부를 확인할 수 없는 경우 입니다. 그렇지 않으면 false입니다. 열을 null 값으로 설정할 수 없는 경우에도 열에 null 값을 포함할 수 있습니다.
IsReadOnly true 이면 열을 수정할 수 없습니다. 그렇지 않으면 false합니다.
IsRowVersion 열에 쓸 수 없는 영구 행 식별자가 포함되고 행을 식별하는 것 외에는 의미 있는 값이 없는 경우에 설정합니다.
IsUnique true: 기본 테이블의 두 행(BaseTableName에서 반환된 테이블)이 이 열에서 동일한 값을 가질 수 없습니다. IsUnique는 열이 키를 단독으로 나타내거나 이 열에만 적용되는 UNIQUE 형식의 제약 조건이 있는 경우 가 되도록 보장 true 됩니다.

false: 열에 기본 테이블에 중복 값이 포함될 수 있습니다. 이 열의 기본값은 입니다 false.
IsKey true: 열은 행 집합에서 행을 고유하게 식별하는 열 집합 중 하나입니다. IsKey가 로 설정된 true 열 집합은 행 집합의 행을 고유하게 식별해야 합니다. 이 열 집합이 열의 최소 집합일 필요는 없습니다. 이 열 집합은 기본 테이블 기본 키, 고유 제약 조건 또는 고유 인덱스에서 생성될 수 있습니다.

false:이 열은 행을 식별할 필요가 없습니다.
IsAutoIncrement true 열이 고정 증분에서 새 행에 값을 할당하면 이고, 그렇지 않으면 false입니다. 이 열의 기본값은 입니다 false.
BaseSchemaName 열을 포함하는 데이터 원본의 스키마 이름입니다. 기본 카탈로그 이름을 확인할 수 없는 경우 NULL입니다. 이 열의 기본값은 null 값입니다.
BaseCatalogName 열이 포함된 데이터 저장소에 있는 카탈로그의 이름입니다. 기본 카탈로그 이름을 확인할 수 없는 경우 NULL입니다. 이 열의 기본값은 null 값입니다.
BaseTableName 열이 포함된 데이터 저장소에 있는 테이블 또는 뷰의 이름입니다. 기본 테이블 이름을 확인할 수 없는 경우 null 값입니다. 이 열의 기본값은 null 값입니다.
BaseColumnName 데이터 저장소의 열 이름입니다. 별칭이 사용된 경우 ColumnName 열에 반환된 열 이름과 다를 수 있습니다. 기본 열 이름을 확인할 수 없거나 행 집합 열이 파생되었지만 데이터 저장소의 열과 동일하지 않은 경우 null 값입니다. 이 열의 기본값은 null 값입니다.

결과 집합의 모든 열에 대해 행이 반환됩니다.

ODBC용 .NET Framework 데이터 공급자는 SQLPrepare, SQLExecute 또는SQLExecuteDirect 함수 중 하나가 호출된 후 ODBC 드라이버에서 메타데이터 정보를 사용할 수 있다고 가정합니다. "SchemaOnly" 명령 동작이 올바르게 작동하려면 SQLPrepare 에서 필요한 메타데이터 정보를 반환해야 합니다. 모든 ODBC 드라이버가 이 함수를 지원하거나 메타데이터 정보를 반환하는 것은 아닙니다. 이러한 경우 SchemaTable의 일부 또는 모든 정보가 누락됩니다. SQLPrepare를 호출한 후 데이터 공급자는 ODBC SQLColAttribute 함수를 호출하여 쿼리 결과의 각 열과 관련된 메타데이터 정보를 찾습니다(예: IsLong, IsUnique, AllowDBNull, BaseTableName, BaseColumnName). 기본 드라이버가 이 정보 중 일부를 반환하지 않으면 SchemaTable의 해당 값이 올바르게 설정되지 않습니다.

또한 ODBC용 .NET Framework 데이터 공급자는 SQLPrimaryKeys를 호출하여 모든 테이블에 대한 주요 정보를 검색합니다. 기본 ODBC 드라이버가 이 함수를 지원하지 않는 경우 데이터 공급자는 SQLStatistics를 호출하고 고유 인덱스 중 하나를 테이블의 기본 키로 선택합니다. 항상 원하는 결과를 제공하는 것은 아닙니다.

OdbcCommandBuilder 제대로 작동하려면 테이블의 기본 키를 올바르게 식별해야 합니다. 쿼리 결과의 모든 열에 대해 BaseTableName이 반환되지 않는 경우 .NET Framework Data Provider for ODBC는 SQL 문을 구문 분석하여 쿼리와 관련된 테이블 이름을 찾으려고 합니다. UPDATE, INSERT, DELETE 및 단순 SELECT 문에서는 작동하지만 조인을 기반으로 하는 저장 프로시저 또는 SELECT 문에서는 작동하지 않습니다. 이 테이블에서 일부 또는 모든 스키마 정보가 누락된 경우 올바른 INSERT, OdbcCommandBuilder UPDATE 또는 DELETE 문을 자동으로 생성하기 위한 스키마 정보가 부족하기 때문에 가 제대로 작동하지 않습니다.

메타데이터 열이 올바른 정보를 반환하도록 하려면 동작 매개 변수를 KeyInfo로 설정하여 를 호출 ExecuteReader 해야 합니다. 그렇지 않으면 스키마 테이블의 일부 열이 기본값, null 또는 잘못된 데이터를 반환할 수 있습니다.

ODBC 드라이버를 통해 Oracle에 ODBC.NET 사용하는 경우 별칭이 지정된 키 열은 키로 인식되지 않습니다. 이는 OdbcDataReader의 스키마 테이블에 있는 IsKey 및 IsUnique 열에 영향을 줍니다. 또한 업데이트 논리를 생성하는 OdbcCommandBuilder의 기능에도 영향을 줍니다. 기본 키 열에 별칭을 사용하지 않는 것이 좋습니다.

참고

Microsoft Jet ODBC 드라이버는 null 허용 여부에 관계없이 항상 고유 인덱스 및 기본 키 열을 nullable로 반환합니다. 드라이버는 기본 키 정보도 반환하지 않습니다. 기본 키 열을 포함하여 고유 인덱스 및 해당 열 목록을 구분하지 않고 반환합니다.

적용 대상

추가 정보