DataReaderでのGetSchemaTable() ODP.NETとADO.NETでの列の違い(difference of schema columns)

DataReader ClassのGetSchemaTable()メソッドで今読み込んでいるスキーマ情報が取得できるのだが、
例えばSQLServer2005+ADO.NETとOracle10g+ODP.NETの場合では返ってくる内容が違う。

「SQL Server2005+ADO.NETの場合」
ColumnName ColumnOrdinal ColumnSize NumericPrecision NumericScale IsUnique IsKey BaseServerName BaseCatalogName BaseColumnName BaseSchemaName BaseTableName DataType AllowDBNull ProviderType IsAliased IsExpression IsIdentity IsAutoIncrement IsRowVersion IsHidden IsLong IsReadOnly ProviderSpecificDataType DataTypeName XmlSchemaCollectionDatabase XmlSchemaCollectionOwningSchema XmlSchemaCollectionName UdtAssemblyQualifiedName NonVersionedProviderType

「Oracle10g+ODP.NETの場合」
ColumnName ColumnOrdinal ColumnSize NumericPrecision NumericScale IsUnique IsKey IsRowID BaseColumnName BaseSchemaName BaseTableName DataType ProviderType AllowDBNull IsAliased IsByteSemantic IsExpression IsHidden IsReadOnly IsLong

両方で共通になっている列 (Common Columns)
ColumnName ColumnOrdinal ColumnSize NumericPrecision NumericScale IsUnique IsKey BaseColumnName BaseSchemaName BaseTableName DataType AllowDBNull ProviderType IsAliased IsExpression IsHidden IsLong IsReadOnly

(1) 1テーブルへのアクセスの場合には、BaseColumnNameとBaseTableNameがセットされるが、複数テーブルの場合にはセットされない。
Case of 'select' from a table,Column 'BaseColumnName','BaseTableName' is setted.
But case of 'select' from tables,Column 'BaseColumnName','BaseTableName' isn't setted.

(2)テーブル上の列ではなくselect文中で式でもとめた列などの場合(String)、ColumnSizeは文字長となるが、通常のテーブル上の列は定義されているサイズ(バイト長)で返ってくる。
'ColumnSize' is string-length that case of column that isn't from database table,an expression in 'select'SQL sentence.
but the case of column from database table,'ColumnSize' is byte-length(that defined by database).



MEMO(84188)