プライマリ・コンテンツに移動

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つである場合は、`true`。`true`に設定された`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` | 列が`LONG`、`LONG` `RAW`、`BLOB`、`CLOB`または`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();
      }
    }

関連項目:

- Oracle.DataAccess.ClientおよびOracle.ManagedDataAccess.Clientのネームスペース

- OracleDataReaderクラス

- OracleDataReaderメンバー