Asignar los tipos de datos del proveedor de datos de .NET Framework para los tipos de datos de .NET Framework
El objeto DataSet de ADO.NET es independiente de cualquier origen de datos específico. Los datos de un DataSet se recuperan desde un origen de datos y los cambios que se realizan en ellos se reflejan en el origen de datos mediante un DataAdapter. Esto significa que cuando un DataAdapter llena una tabla DataTable en un DataSet con valores obtenidos de un origen de datos, los tipos de datos resultantes de las columnas de la DataTable son tipos de .NET Framework en lugar de los tipos específicos del proveedor de datos de .NET Framework utilizado para realizar la conexión con el origen de datos.
De la misma forma, cuando un DataReader devuelve un valor desde un origen de datos, el valor resultante se almacena en una variable local que tiene un tipo de .NET Framework.
Tanto para las operaciones Fill del DataAdapter como para los métodos Get del DataReader, el tipo de .NET Framework se deduce a partir del devuelto por el proveedor de datos de .NET Framework. Es aconsejable utilizar los métodos de descriptor de acceso con tipo de DataReader cuando se conozca el tipo específico del valor que se va a devolver. Los métodos de descriptor de acceso con tipo mejoran el rendimiento ya que devuelven el valor con un tipo determinado de .NET Framework, con lo que se evita tener que efectuar conversiones adicionales de tipo. SqlDataReader expone métodos específicos de descriptor de acceso con tipo de SQL Server en el caso de que ninguno de los tipos de .NET Framework se ajuste a las necesidades de la aplicación. Los métodos específicos de descriptor de acceso con tipo de SQL Server devuelven objetos del tipo System.Data.SqlType.
En las tablas siguientes se muestra el tipo de .NET Framework que se deduce para cada uno de los tipos de datos de Microsoft SQL Server, OLE DB y ODBC. También se incluyen los descriptores de acceso con tipo para el DataReader.
Nota Los valores nulos de cualquier tipo de datos del proveedor de datos de .NET Framework se representan mediante DBNull.Value.
Proveedor de datos de .NET Framework para SQL Server
Tipo de SQL Server | Tipo de .NET Framework | Descriptor de acceso con tipo de .NET Framework | Descriptor de acceso con tipo de 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() |
* Es aconsejable utilizar un descriptor de acceso con tipo cuando se conoce el tipo subyacente de sql_variant.
Proveedor de datos de .NET Framework para OLE DB
Tipo de ADO | Tipo de OLE DB | Tipo de .NET Framework | Descriptor de acceso con tipo de .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 | Se puede usar con DataReader. Vea Recuperar datos mediante 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 | no se admite | |
adVarNumeric | DBTYPE_VARNUMERIC | no se admite |
* En el caso de los tipos de OLE DB DBTYPE_IUNKNOWN y DBTYPE_IDISPATCH, la referencia del objeto es una representación del puntero con las referencias calculadas.
Proveedor de datos de .NET Framework para ODBC
Tipo de ODBC | Tipo de .NET Framework | Descriptor de acceso con tipo de .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() |
Proveedor de datos de .NET Framework para Oracle
Tipo de Oracle | Tipo de .NET Framework | Descriptor de acceso con tipo de .NET Framework | Descriptor de acceso con tipo de 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() |
* El tipo de Oracle especificado sólo está disponible cuando se utilizan tanto el cliente de Oracle 9i como el software de servidor.
** Un tipo NUMBER de Oracle puede tener un máximo de 38 dígitos significativos. El tipo decimal de .NET Framework está limitado a 28 dígitos. Al leer un tipo NUMBER de Oracle en un tipo decimal de .NET Framework se produce una excepción OverflowException para los valores NUMBER que tengan más de 28 dígitos. Si lee un valor NUMBER de Oracle desde un objeto OracleDataReader, se recomienda que llame al método de descriptor de acceso con tipo GetOracleNumber para devolver los valores NUMBER de Oracle como OracleNumber. Si rellena un DataSet, puede utilizar el evento FillError para determinar si se ha producido una excepción OverflowException y emprender la acción adecuada. Para obtener información acerca del evento FillError, vea Trabajar con eventos DataAdapter.