.NET Framework データ プロバイダのデータ型から .NET Framework のデータ型への変換
ADO.NET の DataSet オブジェクトは、特定のデータ ソースには依存しません。DataSet 内のデータはデータ ソースから取得され、変更は DataAdapter によってデータ ソースに反映されます。つまり、DataAdapter が DataSet 内の DataTable に、データ ソースからの値を格納すると、DataTable 内の列で結果として設定されるデータ型は、データ ソースへの接続を行う目的で使用した .NET Framework データ プロバイダ固有の型ではなく、.NET Framework のデータ型になります。
同様に、DataReader がデータ ソースから値を返す場合、結果の値は .NET Framework 型のローカル変数で格納されます。
DataAdapter の Fill 操作と DataReader の Get メソッドのどちらの場合も、.NET Framework の型は .NET Framework データ プロバイダから返された型から推論されます。返される値の型がわかっている場合は、DataReader の型指定されたアクセサ メソッドを使用することをお勧めします。型指定されたアクセサ メソッドを使用して .NET Framework の特定の型として値を返すと、追加の型変換が不要になるため、パフォーマンスが向上します。.NET Framework の型がアプリケーションの要求を満たしていない場合は、SqlDataReader が SQL Server 固有の型指定されたアクセサ メソッドを公開します。SQL Server 固有の型指定されたアクセサ メソッドは System.Data.SqlType のオブジェクトを返します。
Microsoft SQL Server、OLE DB、および ODBC のデータ型から推論される .NET Framework の型を次の表に示します。DataReader の型指定されたアクセサ メソッドも示します。
メモ .NET Framework データ プロバイダのデータ型の null 値は、DBNull.Value で表現されます。
.NET Framework Data Provider for SQL Server
SQL Server 型 | .NET Framework 型 | .NET Framework の型指定されたアクセサ | SqlType の型指定されたアクセサ |
---|---|---|---|
bigint | Int64 | GetInt64() | GetSqlInt64() |
binary | Byte[] | GetBytes() | GetSqlBinary() |
bit | Boolean | GetBoolean() | GetSqlBit() |
char | String
Char[] |
GetString()
GetChars() |
GetSqlString() |
datetime | DateTime | GetDateTime() | GetSqlDateTime() |
decimal | Decimal | GetDecimal() | GetSqlDecimal() |
float | Double | GetDouble() | GetSqlDouble() |
image | Byte[] | GetBytes() | GetSqlBinary() |
int | Int32 | GetInt32() | GetSqlInt32() |
money | Decimal | GetDecimal() | GetSqlMoney() |
nChar | String
Char[] |
GetString()
GetChars() |
GetSqlString() |
ntext | String
Char[] |
GetString()
GetChars() |
GetSqlString() |
numeric | Decimal | GetDecimal() | GetSqlDecimal() |
nvarchar | String
Char[] |
GetString()
GetChars() |
GetSqlString() |
real | Single | GetFloat() | GetSqlSingle() |
smalldatetime | DateTime | GetDateTime() | GetSqlDateTime() |
smallint | Int16 | GetInt16() | GetSqlInt16() |
smallmoney | Decimal | GetDecimal() | GetSqlDecimal() |
sql_variant | Object* | GetValue() * | GetSqlValue() * |
text | String
Char[] |
GetString()
GetChars() |
GetSqlString() |
timestamp | Byte[] | GetBytes() | GetSqlBinary() |
tinyint | Byte | GetByte() | GetSqlByte() |
uniqueidentifier | Guid | GetGuid() | GetSqlGuid() |
varbinary | Byte[] | GetBytes() | GetSqlBinary() |
varchar | String
Char[] |
GetString()
GetChars() |
GetSqlString() |
* sql_variant の基になる型がわかっている場合は、特定の型指定されたアクセサを使用することをお勧めします。
.NET Framework Data Provider for OLE DB
ADO 型 | OLE DB 型 | .NET Framework 型 | .NET Framework の型指定されたアクセサ |
---|---|---|---|
adBigInt | DBTYPE_I8 | Int64 | GetInt64() |
adBinary | DBTYPE_BYTES | Byte[] | GetBytes() |
adBoolean | DBTYPE_BOOL | Boolean | GetBoolean() |
adBSTR | DBTYPE_BSTR | String | GetString() |
adChapter | DBTYPE_HCHAPTER | DataReader によってサポートされます。「DataReader によるデータの取得」を参照してください。 | GetValue() |
adChar | DBTYPE_STR | String | GetString() |
adCurrency | DBTYPE_CY | Decimal | GetDecimal() |
adDate | DBTYPE_DATE | DateTime | GetDateTime() |
adDBDate | DBTYPE_DBDATE | DateTime | GetDateTime() |
adDBTime | DBTYPE_DBTIME | DateTime | GetDateTime() |
adDBTimeStamp | DBTYPE_DBTIMESTAMP | DateTime | GetDateTime() |
adDecimal | DBTYPE_DECIMAL | Decimal | GetDecimal() |
adDouble | DBTYPE_R8 | Double | GetDouble() |
adError | DBTYPE_ERROR | ExternalException | GetValue() |
adFileTime | DBTYPE_FILETIME | DateTime | GetDateTime() |
adGUID | DBTYPE_GUID | Guid | GetGuid() |
adIDispatch | DBTYPE_IDISPATCH * | Object | GetValue() |
adInteger | DBTYPE_I4 | Int32 | GetInt32() |
adIUnknown | DBTYPE_IUNKNOWN * | Object | GetValue() |
adNumeric | DBTYPE_NUMERIC | Decimal | GetDecimal() |
adPropVariant | DBTYPE_PROPVARIANT | Object | GetValue() |
adSingle | DBTYPE_R4 | Single | GetFloat() |
adSmallInt | DBTYPE_I2 | Int16 | GetInt16() |
adTinyInt | DBTYPE_I1 | Byte | GetByte() |
adUnsignedBigInt | DBTYPE_UI8 | UInt64 | GetValue() |
adUnsignedInt | DBTYPE_UI4 | UInt32 | GetValue() |
adUnsignedSmallInt | DBTYPE_UI2 | UInt16 | GetValue() |
adUnsignedTinyInt | DBTYPE_UI1 | Byte | GetByte() |
adVariant | DBTYPE_VARIANT | Object | GetValue() |
adWChar | DBTYPE_WSTR | String | GetString() |
adUserDefined | DBTYPE_UDT | サポートされていません。 | |
adVarNumeric | DBTYPE_VARNUMERIC | サポートされていません。 |
* OLE DB の DBTYPE_IUNKNOWN 型および DBTYPE_IDISPATCH 型の場合、オブジェクト参照はポインタのマーシャリングされた表現 (プロセスの境界を越えて使用するために、カプセル化された形) です。
.NET Framework Data Provider for ODBC
ODBC 型 | .NET Framework 型 | .NET Framework の型指定されたアクセサ |
---|---|---|
SQL_BIGINT | Int64 | GetInt64() |
SQL_BINARY | Byte[] | GetBytes() |
SQL_BIT | Boolean | GetBoolean() |
SQL_CHAR | String
Char[] |
GetString()
GetChars() |
SQL_DECIMAL | Decimal | GetDecimal() |
SQL_DOUBLE | Double | GetDouble() |
SQL_GUID | Guid | GetGuid() |
SQL_INTEGER | Int32 | GetInt32() |
SQL_LONG_VARCHAR | String
Char[] |
GetString()
GetChars() |
SQL_LONGVARBINARY | Byte[] | GetBytes() |
SQL_NUMERIC | Decimal | GetDecimal() |
SQL_REAL | Single | GetFloat() |
SQL_SMALLINT | Int16 | GetInt16() |
SQL_TINYINT | Byte | GetByte() |
SQL_TYPE_TIMES | DateTime | GetDateTime() |
SQL_TYPE_TIMESTAMP | DateTime | GetDateTime() |
SQL_VARBINARY | Byte[] | GetBytes() |
SQL_WCHAR | String
Char[] |
GetString()
GetChars() |
SQL_WLONGVARCHAR | String
Char[] |
GetString()
GetChars() |
SQL_WVARCHAR | String
Char[] |
GetString()
GetChars() |
.NET Framework Data Provider for Oracle
Oracle 型 | .NET Framework 型 | .NET Framework の型指定されたアクセサ | OracleType の型指定されたアクセサ |
---|---|---|---|
BFILE | Byte[] | GetBytes() | GetOracleBFile() |
BLOB | Byte[] | GetBytes() | GetOracleLob() |
CHAR | String
Char[] |
GetString()
GetChars() |
GetOracleString() |
CLOB | String
Char[] |
GetString()
GetChars() |
GetOracleLob() |
DATE | DateTime | GetDateTime() | GetOracleDateTime() |
FLOAT | Decimal | GetDecimal() | GetOracleNumber() ** |
INTEGER | Decimal | GetDecimal() | GetOracleNumber() ** |
INTERVAL YEAR TO MONTH * | Int32 | GetInt32() | GetOracleMonthSpan() |
INTERVAL DAY TO SECOND * | TimeSpan | GetTimeSpan() | GetOracleTimeSpan() |
LONG | String
Char[] |
GetString()
GetChars() |
GetOracleString() |
LONG RAW | Byte[] | GetBytes() | GetOracleBinary() |
NCHAR | String
Char[] |
GetString()
GetChars() |
GetOracleString() |
NCLOB | String
Char[] |
GetString()
GetChars() |
GetOracleLob() |
NUMBER | Decimal | GetDecimal() | GetOracleNumber() ** |
NVARCHAR2 | String
Char[] |
GetString()
GetChars() |
GetOracleString() |
RAW | Byte[] | GetBytes() | GetOracleBinary() |
REF CURSOR | |||
ROWID | String
Char[] |
GetString()
GetChars() |
GetOracleString() |
TIMESTAMP * | DateTime | GetDateTime() | GetOracleDateTime() |
TIMESTAMP WITH LOCAL TIME ZONE * | DateTime | GetDateTime() | GetOracleDateTime() |
TIMESTAMP WITH TIME ZONE * | DateTime | GetDateTime() | GetOracleDateTime() |
UNSIGNED INTEGER | Decimal | GetDecimal() | GetOracleNumber() ** |
VARCHAR2 | String
Char[] |
GetString()
GetChars() |
GetOracleString() |
* この Oracle 型は、Oracle 9i クライアント ソフトウェアとサーバー ソフトウェアの両方を使用している場合だけ使用できます。
** Oracle の NUMBER 型の有効桁数は 38 桁です。.NET Framework の decimal 型は 28 桁に制限されています。Oracle の NUMBER 型を .NET Framework の decimal 型に読み込む場合、28 桁を超える NUMBER 型の値では OverflowException がスローされます。OracleDataReader から Oracle の NUMBER 型の値を読み込む場合は、GetOracleNumber の型指定されたアクセサ メソッドを呼び出し、OracleNumber として Oracle の NUMBER 型の値を返すことをお勧めします。DataSet にデータを読む込む場合は、FillError イベントを使用して、OverflowException が発生したかどうかを確認し、適切な対応をすることができます。FillError イベントの詳細については、「DataAdapter イベントの使用」を参照してください。