Zuordnen der Datentypen von .NET Framework-Datenprovidern zu .NET Framework-Datentypen
Das ADO.NET-DataSet-Objekt ist unabhängig von einer bestimmten Datenquelle. Daten in einem DataSet werden aus einer Datenquelle abgerufen, und Änderungen werden mit Hilfe eines DataAdapter-Objekts in die Datenquelle übernommen. Das bedeutet, wenn ein DataAdapter-Objekt eine DataTable in einem DataSet mit Werten aus einer Datenquelle füllt, entsprechen die Datentypen der Spalten in der DataTable .NET Framework-Datentypen und sind demnach keine speziellen Datentypen des .NET Framework-Datenproviders, der zum Herstellen der Verbindung mit der Datenquelle verwendet wird.
Wenn ein DataReader-Objekt einen Wert aus einer Datenquelle zurückgibt, wird dieser Wert entsprechend in einer lokalen Variable gespeichert, die einen .NET Framework-Datentyp aufweist.
Sowohl für die Fill-Operationen des DataAdapter als auch für die Get-Methoden des DataReader wird der .NET Framework-Datentyp von dem Datentyp hergeleitet, der vom .NET Framework-Datenprovider zurückgegeben wird. Es empfiehlt sich, die typisierten Accessormethoden des DataReaders zu verwenden, wenn Sie den Typ des zurückgegebenen Wertes kennen. Mit typisierten Accessormethoden erzielen Sie eine bessere Leistung, da ein Wert als bestimmter .NET Framwork-Typ zurückgegeben wird und somit keine weitere Typkonvertierung erforderlich ist. Das SqlDataReader-Objekt stellt SQL Server-spezifische typisierte Accessormethoden bereit, wenn ein .NET Framework-Typ nicht den Anforderungen der Anwendung entspricht. SQL Server-spezifische typisierte Accessormethoden geben Objekte mit System.Data.SqlType zurück.
In den folgenden Tabellen werden die hergeleiteten .NET Framework-Typen für Datentypen von Microsoft SQL Server, OLE DB und ODBC aufgelistet. Die typisierten Accessormethoden für den DataReader werden ebenfalls genannt.
Hinweis Nullwerte werden für den Datentyp jedes beliebigen .NET Framework-Datenproviders mit DBNull.Value dargestellt.
.NET Framework-Datenprovider für SQL Server
SQL Server-Typ | .NET Framework-Typ | Typisierter .NET Framework-Accessor | Typisierter SqlType-Accessor |
---|---|---|---|
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 empfiehlt sich, einen bestimmten typisierten Accessor zu verwenden, wenn Sie den zugrunde liegenden Typ von sql_variant kennen.
.NET Framework-Datenprovider für OLE DB
ADO-Typ | OLE DB-Typ | .NET Framework-Typ | Typisierter .NET Framework-Accessor |
---|---|---|---|
adBigInt | DBTYPE_I8 | Int64 | GetInt64() |
adBinary | DBTYPE_BYTES | Byte[] | GetBytes() |
adBoolean | DBTYPE_BOOL | Boolean | GetBoolean() |
adBSTR | DBTYPE_BSTR | String | GetString() |
adChapter | DBTYPE_HCHAPTER | Unterstützt durch das DataReader-Objekt. Siehe Abrufen von Daten mit dem DataReader-Objekt. | 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 | Nicht unterstützt | |
adVarNumeric | DBTYPE_VARNUMERIC | Nicht unterstützt |
* Für die OLE DB-Typen DBTYPE_IUNKNOWN und DBTYPE_IDISPATCH ist der Objektverweis eine gemarshallte Darstellung des Zeigers.
.NET Framework-Datenprovider für ODBC
ODBC-Typ | .NET Framework-Typ | Typisierter .NET Framework-Accessor |
---|---|---|
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-Datenprovider für Oracle
Oracle-Typ | .NET Framework-Typ | Typisierter .NET Framework-Accessor | Typisierter OracleType-Accessor |
---|---|---|---|
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() |
* Der angegebene Oracle-Typ ist nur verfügbar, wenn die Oracle 9i-Client- und Serversoftware verwendet wird.
** Der Oracle-Typ NUMBER darf aus maximal 38 signifikanten Ziffern bestehen. Der .NET Framework-Typ decimal ist auf 28 Ziffern begrenzt. Wenn der Oracle-Typ NUMBER in einen .NET Framework-Typ decimal eingelesen wird, wird bei NUMBER-Werten mit mehr als 28 Ziffern eine OverflowException ausgelöst. Wenn Sie einen Wert des Oracle-Typs NUMBER aus OracleDataReader lesen, wird empfohlen, die typisierte Accessormethode GetOracleNumber aufzurufen, um die Werte des Oracle-Typs NUMBER als OracleNumber zurückzugeben. Wenn Sie ein DataSet füllen, können Sie mit dem FillError-Ereignis feststellen, ob eine OverflowException aufgetreten ist, und eine entsprechende Aktion ausführen. Informationen zum FillError-Ereignis finden Sie unter Arbeiten mit DataAdapter-Ereignissen.