2010-02-26 8 views
1

표준 ADO.NET 'DbConnection.GetSchema'API를 사용하여 VistaDB 4.0 데이터베이스의 데이터베이스 스키마를 읽습니다. 컬럼에 대한 'Identity'설정을 얻는 방법을 찾지 못했습니까? 'Columns'스키마 컬렉션에는이 열이없는 것 같아요. 내가 조사해야하는 다른 컬렉션을 알지 못합니다.VistaDB의 열에 'Identity'설정 받기

사용 가능한 컬렉션을 쿼리하여 불가능한 경우 일부 시스템 테이블이나 뷰를 쿼리해야합니까?

도움을 주시면 감사하겠습니다.

답변

2

VistaDB에는 "sys"테이블이 없습니다. 비록 당신이 필요로하는 대부분을 포함하는 [데이터베이스 스키마] 테이블이 있습니다.

[데이터베이스 스키마]

이 같은 데이터베이스 스키마 테이블을 사용하여 데이터베이스의 ID 열을 얻을 수 있습니다 :

유형 ID 목록과 그들이에 대한 도움말 파일에
select * from [database schema] where typeid = 6 

봐 평균.

그런 다음 목록을 가져온 후에는 해당 테이블을 식별 할 수있는 유형 ID를 테이블의 typeid와 비교할 수 있습니다.

데이터베이스 스키마 테이블의 유일한 catch는 자체 참조 또는 자체 조인 (디자인 제한)이 불가능하다는 것입니다. 따라서 끌어다 놓고 참조해야하는 경우 두 명령 또는 임시 테이블을 통해이를 수행해야합니다. 도움말 파일에는이를 수행하는 방법의 예가 있습니다.

다른 방법

당신은 또한 VistaDB 저장된 프로 시저 사용하여 모든 ID 열 찾을 수 있습니다

: 당신이 다음 값을 찾을 필요가

select * from VistaDBColumnSchema() where is_identity = true 

DDA

을, 씨앗 , 등 당신은 또한 DDA (직접 데이터 액세스) 방법을 통해 얻을 수 있습니다.

IVistaDBTableSchema 개체의 Identities 속성은 해당 테이블의 ID 컬렉션입니다. 그런 다음 해당 컬렉션을 걸어 개별 값을 가져올 수 있습니다.

포함 된 ID 정보는 Seed, Step, Tablename 및 Columnname입니다.

ADO.NET GetSchemaTable 방법

그리고 네, 또 다른 방법이있다. 리더에서 GetSchemaTable을 호출하여 기본 구조에 대한 추가 정보를 얻을 수 있습니다.

using (VistaDBConnection cn = new VistaDBConnection("Data Source=" + dbName)) 
{ 
    cn.Open(); 

    using (VistaDBCommand cmd = new VistaDBCommand("Select * from simpletable", cn)) 
    { 
     using (VistaDBDataReader myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo)) 
     { 
      //Retrieve column schema into a DataTable. 
      DataTable schemaTable = myReader.GetSchemaTable(); 

      foreach (DataRow myField in schemaTable.Rows) 
      { 
       foreach (DataColumn myProperty in schemaTable.Columns) 
       { 
        System.Diagnostics.Debug.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString()); 
       } 
      } 
     } 
    } 
}