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

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[].
时间: 2024-08-10 02:10:48

ORACLE与.NET类型对应关系(转)的相关文章

Oracle的Numer类型与C,C#数据类型对应关系

转自原文 Oracle的Numer类型与C,C#数据类型对应关系 最近一直在编和Oracle数据库相关程序.Oracle的Number类型和C语言,C#语言类型的对应关系,在网络上查找很久,也没有找到说明文字.但在http://oracle.chinaitlab.com/induction/734741.html有<Oracle与DB2数据类型分类对应说明>,根据这篇文章,我总结了一下Oracle的Number类型和C语言,C#语言类型的对应关系. NUMBER,是以十进制格式进行存储的,它便

Oracle关于date类型数据的总结

往Oracle数据库中插入日期型数据(to_date的用法) INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-20 18:31:34' , 'YYYY-MM-DD HH24:MI:SS' ) ) ; 查询显示:2007-12-20 18:31:34.0 ------------------- INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-14 14:10' , 'YYYY-MM-DD HH2

Oracle修改字段类型和长度

Oracle修改字段名 alter table 表名 rename column 旧字段名 to 新字段名 Oracle修改字段类型和长度 alter table 表名 modify 字段名 数据类型 如果是修改数据类型比如由varchar2修改为int且字段内有值,会报如下错误 解决方法参考:http://blog.csdn.net/itmyhome1990/article/details/8681206 转载请注明出处:http://blog.csdn.net/itmyhome1990/ar

Oracle中Long类型的使用与不可使用

ORA-01754 表只能包含一个LONG类型的列alter table 表名 add 字段名 long raw错误原因:数据表中同时建立了LONG RAW类型和LONG类型.--------------------------------------------------------------------------------------------------一.可以在以下情况使用long字段:1. select的list列表.SQL> insert into test_long va

ORACLE 中NUMBER 类型 低精度转换成高精度

例如: 表User中有一个字段 salary  Number(10,3), 如果想把字段salary的类型提高精度到salary  Number(10,6),保留六位小数, 解决办法:1,ALTER TABEL USER MODIFY SALARY NUMBER(13,6); 解释:number类型刚开始是,长度10位,3位小数,如果想增加3位小数,对应的长度也必须增加,否则无法修改.所以NUMBER(13,6);这样就可以提高精度了, ORACLE 中NUMBER 类型 低精度转换成高精度

oracle里long类型的总结

转自原文oracle中long类型为什么不推荐使用 不是不推荐使用的,是一般用不到,而有些时候是会用到的,所以不能一概而论.1.LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB.2.对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的.3.LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型.4.很多工具,包括SQL*Plus,处理LONG 数据类型都是很困难的.5.LONG 数据类型的使用中

(转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上

原文摘自:http://heisetoufa.iteye.com/blog/504068 '模块代码 Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long Private Declare Function OleLoadPicture Lib "olepro3

Oracle的对象类型

Oracle的对象类型 对象类型 在PL/SQL中,面向对象的程序设计师基于对象类型来完成的.对象类型是用户自定义的一种复合数据类型,它封装了数据结构和用于操纵这些数据结构的过程和函数. 数据库的对象类型与JAVA和C#中德类相似,都可以包含属性(用于存储对象的状态)和方法(用于建立对象的行为模型).对象类型有时也为用户自定义类型. 对象类型包括对象类型规范(Object Type Specification)和对象类型体(Object Type Body)两个部分: 对象类型规范 对象与应用的

对于Oracle中Number类型的字段映射成Java中的具体类型的问题

我在Oracle中给一个用户Id字段设置为Number类型,使用JDBC在完成ORM的时候,以为其可以自动转换为Integer,因为我的POJO类id舒心实用的就是Integer.但事实是,我在测试的时候,发现所有的用户id全为null,还在奇怪明明数据库中id是有值的,为什么取不到? 原因在于Oracle的Number类型映射为Java类型中的 java.math.BigDecimal (不可变的.任意精度的有符号十进制数)类型,并不是我简单认为的 Integer ,还会报一个错误: 就是说B