2009-10-15 11 views
6
OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo); 
DataTable dataTable = oleDbDataReader.GetSchemaTable(); 

GetSchemaTable()은 어떻게 작동합니까?GetSchemaTable()은 어떻게 작동합니까?

어디서 RDBMS에서 정보를 얻을 수 있습니까?

답변

6

IDataReader.GetSchemaTable()의 구현은 공급자에 따라 다르므로 다양 할 것입니다. 당신은 당신의 자신의 공급자를 쓸 수 있으며 원하는대로 할 수 있습니다.

틀림없이 프레임 워크의 디자인이 좋지 않습니다. 형식이 지정되지 않은 DataTable 또는 DataSet을 반환하는 인터페이스 메서드를 사용하면 안됩니다. 일종의 처음에 인터페이스하여 제약의 지점을 패배 : 는 "당신은 DataTable를 반환하는 방법이 있어야하지만 우리는 그것을 가지고 무엇을 행이나 열 걱정하지 않는다"공급자가 SQL GetSchemaTable()입니다

하더라도 [syscolumns] 또는 [sysobjects]으로 돌아 가지 않습니다. 결과 집합은 DB에있는 객체를 반영 할 필요가 없으므로 추가 DB 호출이고, 추가 권한이 필요하며 어쨌든 작동하지 않습니다.

확실하지 않지만, IDataReader.GetSchemaTable() 구현의 대다수가 결과 집합으로 보유 된 메타 데이터의 일부 속성을 읽을 것으로 기대합니다.

-1

각 데이터베이스의 시스템 테이블 (예 : syscolumns, sysobjects 등).

+0

항상이 경우입니까, 아니면 사용중인 OLE DB 공급자에 따라 다릅니 까? –

+2

그게 잘못입니다. 결과가 동적 일 수 있으므로 사용자가 sysobjects (MSSQL 2005+에서 VIEW DEFINITION)를 볼 수있는 권한이 없을 수 있습니다. – VladV

+0

독자가'SELECT 'test', 1'에 있다고 가정 해보십시오. 당신은'IDataReader' 결과 집합에'GetSchemaTable()'을 호출 할 수 있습니다. 그리고 그것은'[sysobjects]'를 확실히 검사하지 않을 것입니다. – Keith

2

GetSchemaTable()은 ADO.NET에서 반환 한 결과 집합의 메타 데이터를 읽습니다.

관련 문제