2012-08-30 14 views
6

모든 "테이블"이름을 OdbcConnection에서 가져오고 모든 "테이블"이름에 대해 모든 열 이름을 가져 오려고합니다.odbc 데이터베이스에서 모든 테이블과 모든 열 가져 오기

그래서 OdbcConnection.GetSchema() 기능을 발견했습니다. connection.GetSchema("Tables")을 사용하여 모든 테이블 이름을 가져옵니다. 하지만 이제는 테이블에 대한 열 정보를 얻고 싶습니다. 나는 connection.GetSchema("Columns")이 나에게 열 정보를 줄 것을 알았지 만 이것은 단지 무작위/첫 번째 (?) "테이블"에서 데이터 소스 (Windows CSV 드라이버 사용)에서 제공하기 때문에 매우 도움이되지 않습니다.

가장 어려운 부분은 모든 (대부분의) ODBC 드라이버에서 작동해야한다는 것입니다. 어떤 기본 데이터 소스가 사용될 지 알 수 없습니다.

아이디어가 있으십니까?

답변

7

열 스키마는 모든 테이블에

columns = cn.GetSchema("Columns"); 

반환 모든 열, 모든 테이블

cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, 
     new Object[] { null, null, null, null }); 

또는 단일 테이블 마찬가지로

cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, 
     new Object[] { null, null, "table1", null }); 

에 대한

를 반환합니다.

상세 정보 : Schema Restrictions

편집 재

string cs = @"Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=z:\docs;"; 
    OdbcConnection cn = new OdbcConnection(cs); 
    cn.Open(); 

    DataTable tables = cn.GetSchema("Tables"); 
    DataTable columns = cn.GetSchema("Columns"); 

    foreach (DataRow row in columns.Rows) 
    { 
     Console.WriteLine(row["COLUMN_NAME"].ToString()); 
     Console.WriteLine(row["TABLE_NAME"].ToString()); 
    } 
    Console.Read(); 
+0

나는 내 두 개의 테스트 "테이블", 즉, 텍스트 파일에서 열을 얻을 코멘트. 추가 예제를 참조하십시오. – Fionnuala

+0

@ Fionualla : 이름에 특정 단어가 들어있는 표를 반환 할 수 있습니까? – Saeid