プライマリ・コンテンツに移動
Oracle® Data Provider for .NET開発者ガイド
ODAC 12.2c リリース1 (12.2.0.1) for Microsoft Windows
E88311-03
目次へ移動
目次
索引へ移動
索引

前
次

GetSchemaTable

このメソッドは、OracleDataReaderの列メタデータを記述するDataTableを戻します。

宣言

// C#
public override DataTable GetSchemaTable();

戻り値

結果セットのメタデータを含むDataTable

実装

IDataReader

例外

InvalidOperationException - 接続がクローズされているか、またはリーダーがクローズされています。

備考

OracleDataReader.GetSchemaTableメソッドは、SchemaTableを戻します。

OracleDataReader SchemaTable

OracleDataReader SchemaTableは、OracleDataReaderの列メタデータを記述するDataTableです。

ColumnSizeの値は、表定義のVARCHAR2型、NVARCHAR2型またはRAW型の列の定義によって32Kまで表示されます。

SchemaTableの列は、次に表示する順序になります。

表6-63 OracleDataReader SchemaTable

名前 ネーム・タイプ 説明

ColumnName

System.String

列の名前。

ColumnOrdinal

System.Int32

0ベースの列の序数。

ColumnSize

System.Int64

列内の値として可能な最大長。ColumnSize値は次のようにして決定されます:

  • CHARタイプおよびVARCHAR2タイプ

    バイト表示 - IsByteSemanticブール値がtrueの場合

    文字表示 - IsByteSemanticブール値がfalseの場合

  • 他のすべてのタイプ:

    バイト表示

詳細は、IsByteSemanticを参照してください。

NumericPrecision

System.Int16

列が数値のデータ型の場合の、列の最大精度。

この列には、Oracle NUMBER、Oracle INTERVAL YEAR TO MONTHおよびOracle INTERVAL DAY TO SECOND 列に対する有効な値が含まれています。その他すべての列については、値はnullです。

NumericScale

System.Int16

列のスケール。

この列には、Oracle NUMBER、Oracle INTERVAL DAY TO SECONDおよびOracle TIMESTAMP列に対する有効な値が含まれています。その他すべての列については、値はnullです。

IsUnique

System.Boolean

列値が一意かどうかを示します。

実表の2行にこの列の同じ値が含まれていない場合は、true。ここでは、実表はBaseTableNameで戻された表です。

次の条件が、この優先順位で適用される場合、IsUniqueは必ずtrueになります。

  • 列それ自体がベース表の主キーであり、その列にNOT NULL制約が定義されている

  • この列のみに適用される一意制約または一意索引、および列に対して定義されたNOT NULL制約がある

  • この列は明示的に選択されたROWIDである。

列に実表の重複した値を含めることができる場合、IsUniqueはfalse。

デフォルトは、falseです。

選択リストの実表の列の各出現に対して、このプロパティの値は同じです。

IsKey

System.Boolean

列がキー列かどうかを示します。

列が、行を一意に識別する行セット内の列のセットの1つである場合は、truetrueに設定されたIsKeyを持つ列のセットは行セットの行を一意に識別する必要があります。この列のセットが最小の列セットである必要はありません。

この列セットは、優先度の低い順に次の1つから生成できます。

  • ベース表の主キーに次の条件がある: 複合主キーの場合は、その列またはすべての列にNOT NULL制約を定義する必要がある。

  • 次の条件付きの、任意の一意制約または一意索引。複合一意制約または複合一意索引の場合、NOT NULL制約は列または列のすべてに対して定義する必要があります。

  • 次の条件付きの、ベース表の複合主キー。NULL制約は列の少なくとも1つ(すべてではない)に対して定義する必要があります。

  • 次の条件付きの、任意の複合一意制約または複合一意索引。NULL制約は列の少なくとも1つ(すべてではない)に対して定義する必要があります。

明示的に選択されたROWID。列が行を一意に識別する必要がない場合は、falseです。選択リストの実表の列の各出現に対して、このプロパティの値は同じです。

IsRowID

System.Boolean

列がROWIDの場合はtrue、それ以外の場合はfalse

BaseColumnName

System.String

列に別名が使用されている場合の、データベース内の列名。

BaseSchemaName

System.String

列を含むデータベース内のスキーマ名。

BaseTableName

System.String

列を含むデータベース内の表名またはビュー名。

DataType

System.RuntimeType

共通言語のランタイム型にマップします。

ProviderType

Oracle.DataAccess. Client.OracleDbType

列のデータベース列タイプ(OracleDbType)。

AllowDBNull

System.Boolean

null値が許可されている場合はtrue、それ以外の場合はfalse

IsAliased

System.Boolean

列が別名の場合はtrue、それ以外の場合はfalse

IsByteSemantic

System.Boolean

IsByteSemanticの場合は次のとおりです。

  • ColumnSize値にバイト・セマンティクスが使用されている場合はtrue

  • ColumnSizeにキャラクタ・セマンティクスが使用されている場合はfalse

Oracle9iより前のバージョンのデータベースに接続する場合は、この値は常にtrueです。

IsExpression

System.Boolean

列が式の場合はtrue、それ以外の場合はfalse

IsHidden

System.Boolean

列が非表示の場合はtrue、それ以外の場合はfalse

IsReadOnly

System.Boolean

列が読取り専用の場合はtrue、それ以外の場合はfalse

IsLong

System.Boolean

列がLONGLONG RAWBLOBCLOBまたはBFILEの場合はtrue、それ以外の場合はfalse

UdtTypeName

System.String

UDTのタイプ名。

IsIdentity

System.Boolean

列がID列の場合はtrue、それ以外の場合はfalse

IsAutoIncrement

System.Boolean

列の新しい行に固定増分で値が割り当てられる場合はtrue、それ以外の場合はfalse

ODP.NET管理対象ドライバでは使用できません

IdentityType

OracleIdentityType

ID列の値の生成方法を指定するOracleIdentityTypeの列挙値、それ以外の場合(列がID列でない場合)はDbNull.Value

ODP.NET管理対象ドライバでは使用できません

この例では、リーダーからSchemaTableを作成して使用します。

/* Database Setup, if you have not done so yet.
connect scott/tiger@oracle 
CREATE TABLE empInfo (
empno NUMBER(4) PRIMARY KEY,
empName VARCHAR2(20) NOT NULL,
hiredate DATE,
salary NUMBER(7,2),
jobDescription Clob,
byteCodes BLOB
);
 
Insert into empInfo(EMPNO,EMPNAME,JOBDESCRIPTION,byteCodes) values 
(1,'KING','SOFTWARE ENGR', '5657');
Insert into empInfo(EMPNO,EMPNAME,JOBDESCRIPTION,byteCodes) values 
(2,'SCOTT','MANAGER', '5960');
commit;
 
*/
// C#
 
using System;
using System.Data;
using Oracle.DataAccess.Client; 
using Oracle.DataAccess.Types;
 
class GetSchemaTableSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    string cmdstr = "SELECT EMPNO,EMPNAME FROM EMPINFO where EMPNO = 1";
    OracleCommand cmd = new OracleCommand(cmdstr, con);
 
    //get the reader
    OracleDataReader reader = cmd.ExecuteReader();
 
    //get the schema table
    DataTable schemaTable = reader.GetSchemaTable();
 
    //retrieve the first column info.
    DataRow row = schemaTable.Rows[0];
 
    //print out the column info
    Console.WriteLine("Column name: " + row["COLUMNNAME"]);
    Console.WriteLine("Precision: " + row["NUMERICPRECISION"]);
    Console.WriteLine("Scale: " + row["NUMERICSCALE"]);
    reader.Close();
 
    // Close the connection
    con.Close();
  }
}