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の列は、次に表示する順序になります。
表7-81 OracleDataReader SchemaTable
| 名前 | ネーム・タイプ | 説明 |
|---|---|---|
|
|
|
列の名前。 |
|
|
|
|
|
|
|
列内の値として可能な最大長。
|
|
|
|
列が数値のデータ型の場合の、列の最大精度。 この列には、Oracle |
|
|
|
列のスケール。 この列には、Oracle |
|
|
|
列値が一意かどうかを示します。 実表の2行にこの列の同じ値が含まれていない場合は、 次の条件が、この優先順位で適用される場合、
列に実表の重複した値を含めることができる場合、 デフォルトは、 選択リストの実表の列の各出現に対して、このプロパティの値は同じです。 |
|
|
|
列がキー列かどうかを示します。 列が、行を一意に識別する行セット内の列のセットの1つである場合は、 この列セットは、優先度の低い順に次の1つから生成できます。
明示的に選択された |
|
|
|
列が |
|
|
|
列に別名が使用されている場合の、データベース内の列名。 |
|
|
|
列を含むデータベース内のスキーマ名。 |
|
|
|
列を含むデータベース内の表名またはビュー名。 |
|
|
|
共通言語のランタイム型にマップします。 |
|
|
|
列のデータベース列タイプ( |
|
|
|
|
|
|
|
列が別名の場合は |
|
|
|
Oracle9iより前のバージョンのデータベースに接続する場合は、この値は常に |
|
|
|
列が式の場合は |
|
|
|
列が非表示の場合は |
|
|
|
列が読取り専用の場合は |
|
|
|
列が |
|
|
|
UDTのタイプ名。 |
|
|
|
列がID列の場合は |
|
|
|
列の新しい行に固定増分で値が割り当てられる場合は ODP.NET管理対象ドライバおよびODP.NET Coreでは使用できません |
|
|
|
ID列の値の生成方法を指定する ODP.NET管理対象ドライバおよびODP.NET Coreでは使用できません |
例
この例では、リーダーから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();
}
}