当前位置:Gxlcms > 数据库问题 > ORACLE与.NET类型对应关系(转)

ORACLE与.NET类型对应关系(转)

时间:2021-07-01 10:21:17 帮助过:9人阅读

ORACLE与.NET类型对应关系

想来这个是最重要的事情了,因为多数情况下,我们使用dbhelper来调用数据库的时候,是因为如下三个地方导致错误:
1、错误的sql语句:末尾多了分号,少了部分关键字
2、sql中的参数与parameter[]不对应。
3、parasmeter[]中的数据类型转为Oracle的数据类型中出错。
通常情况下,我们大设置paramenter[]时,只会给出变量名和对应的值(多数是.NET中的变量)去让ODP自动执行数据类型转换,而ODP一般都可以正确的转换,但是,有时候也会出现一些意外的情况,这时,就需要我们手动来明确的设置。

ODP.NET的数据类型以结构体或者类的形式来支持ORACLE的本地类型以及PL/SQL的数据类型。其中结构体是值类型,而类则是引用类型。 ORACLE的数据类型比.NET自己的数据类型具有更大的优势,比如OracleDecimal支持38位而.NET的Decimal只支持28位。

下面表中展示了ORACLE数据库的本地类型(包含PL/SQL的)、ODP.NET的数据类型以及.NET的数据类型的对应关系。
而我们要关心的是把.NET的数据类型转为正确的ODP.NET数据类型就ok了,剩下的操作ODP.NET会帮助我们转换,说白了,就是我们在
New OracleParamter(){ParameterName=":name",Value=var}的时候,确保我们的.NET类型var与数据库中的对应,或者在我们.NET数据类型无法满足使用的时候,使用ODP.NET的类型声明变量类型。

Oracle Native Data Type or PL/SQL Data Type ODP.NET Type .NET Framework Data Types
BFILE OracleBFile class System.Byte[]
BINARY_DOUBLE OracleDecimal structure System.Decimal
BINARY_FLOAT OracleDecimal structure System.Decimal
BINARY_INTEGER (PL/SQL only) OracleDecimal structure System.Decimal
BLOB OracleBlob class System.Byte[]
BOOLEAN (PL/SQL only) OracleBoolean structure System.Boolean
CHAR OracleString structure System.String
CLOB OracleClob class System.String
DATE OracleDate structure System.DateTime
INTERVAL DAY TO SECOND OracleIntervalDS structure System.TimeSpan
INTERVAL YEAR TO MONTH OracleIntervalYM structure System.Int64
LONG OracleString structure System.String
LONG RAW OracleBinary structure System.Byte[]
NCHAR OracleString structure System.String
NCLOB OracleClob class System.String
NUMBER OracleDecimal structure System.Decimal
NVARCHAR2 OracleString structure System.String
PLS_INTEGER (PL/SQL only) OracleDecimal Structure System.Decimal
RAW OracleBinary structure System.Byte[]
REF OracleRef class System.String
REF CURSOR (PL/SQL only) OracleRefCursor class Not Applicable
ROWID OracleString structure System.String
TIMESTAMP OracleTimeStamp structure System.DateTime
TIMESTAMP WITH LOCAL TIMEZONE OracleTimeStampLTZ structure System.DateTime
TIMESTAMP WITH TIME ZONE OracleTimeStampTZ structure System.DateTime
UROWID OracleString structure System.String
VARCHAR2 OracleString structure System.String
XMLType OracleXmlType class System.String

需要注意的是:

  • 所有数字类型都使用DECIMAL,除了INTERVAL YEAR TO MONTH对应INT64除外(这个类型我们基本不会使用到)。
  • ROWID,UROWID使用的是STRING而不是数字类型.
  • 时间相关的全部使用DateTime,除了INTERVAL DAY TO SECOND使用TimeSpan(这个类型我们基本不会使用到)。
  • RAW使用的是Byte[],所以,LONG RAW使用的也是Byte[].

ORACLE与.NET类型对应关系(转)

标签:

人气教程排行