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[].
ORACLE与.NET类型对应关系(转)的更多相关文章
- Oracle Data Provider for .NET的使用(三)-ORACLE与.NET类型对应关系
想来这个是最重要的事情了,因为多数情况下,我们使用dbhelper来调用数据库的时候,是因为如下三个地方导致错误: 1.错误的sql语句:末尾多了分号,少了部分关键字 2.sql中的参数与parame ...
- ORACLE插入DATE类型字段
1 怎样在ORACLE中输入DATE类型的字段 insert into table_name (date_column) values(to_date('2006-06-04','yyyy-mm-dd ...
- Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值
感谢原作者:破剑冰-Oracle中Clob类型处理解析 上一篇分析:ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 最近为Clob字段在插入数据时发现当字符的字节数(一个半角字符一 ...
- Oracle修改字段类型和长度
Oracle修改字段名 alter table 表名 rename column 旧字段名 to 新字段名 Oracle修改字段类型和长度 alter table 表名 modify 字段名 数据类型 ...
- Oracle改动字段类型和长度
Oracle改动字段名 alter table 表名 rename column 旧字段名 to 新字段名 Oracle改动字段类型和长度 alter table 表名 modify 字段名 数据类型 ...
- oracle中日期类型 to_date 和to_timestamp什么区别啊?
1.to_date() 和to_timestamp()区别 由于oracle中date类型只支持到秒,不支持到毫秒,所以to_date()不能取到毫秒.如果要取到毫秒,oracle 9i以上版本,可以 ...
- 【转载】MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
[原文链接]:MyBatis JdbcType 与Oracle.MySql数据类型对应关系详解 1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 2. Mybatis ...
- oracle数据库数值类型
---恢复内容开始--- 内容摘自网络 Oracle的数值类型有int,number,float,decimal,numberic等. NUMBER类型 定义 定义格式NUMBER (prec ...
- 解决:oracle+myBatis ResultMap 类型为 map 时,表字段类型有 Long/Blob/Clob 时报错
前言:最近在做一个通用查询单表的组件,所以 sql 的写法就是 select *,然后 resultType="map" .如果数据库中的表里有字段类型为 Long 等类型时,my ...
随机推荐
- C++类的成员初始化列表的相关问题
在以下四中情况下,要想让程序顺利编译,必须使用成员初始化列表(member initialization list): 1,初始化一个引用成员(reference member): 2,初始化一个常量 ...
- apache的MPM机制-prefork
apache是基于模块化设计的. 关于基础的服务,也采用了模块化的设计,但是这个模块是具有排他性的,同一时间只能有一个得到调用. MPM模块(multi processing module) 多处理模 ...
- 【Android】 Sqlite3 not found
调试机没有sqlite3命令文件 导入即可 sqlite3 http://pan.baidu.com/s/1bohTMiz //(使用老版sqlite3需要导入libncurses.so文件至/sys ...
- 移动端reset.css
* { margin:; padding:; } article, aside, details, figcaption, figure, footer, header, hgroup, main, ...
- Java源代码分析与生成
源代码分析:可使用ANTLRANTLR是开源的语法分析器,可以用来构造自己的语言,或者对现有的语言进行语法分析. JavaParser 对Java代码进行分析 CodeModel 用于生成Java代码 ...
- MySQL修改时区的方法小结
这篇文章主要介绍了MySQL修改时区的方法,总结分析了三种常见的MySQL时区修改技巧,包括命令行模式.配置文件方式及代码方式,需要的朋友可以参考下 方法一:通过mysql命令行模式下动态修改 1.1 ...
- POJ 1837 Balance 01背包
题目: http://poj.org/problem?id=1837 感觉dp的题目都很难做,这道题如果不看题解不知道憋到毕业能不能做出来,转化成了01背包问题,很神奇.. #include < ...
- POJ 2002 Squares 哈希
题目链接: http://poj.org/problem?id=2002 #include <stdio.h> #include <string.h> ; struct Has ...
- DES原理与实现
一 DES综述 DES是对称密码的一种,它使用56位秘钥对64位长分组进行加密.DES对每个分组的内容都会进行16轮迭代,每轮的操作相同但是对应不同的子秘钥.所有的子秘钥都是由主密钥推导而来. 64位 ...
- 阿里云centOS6 下python安装及配置、pip安装及配置、ipython安装及配置
我是在阿里云服务器上进行的python环境搭建,阿里云服务器会自带python但是版本低,所以打算自己安装一个,期间遇到各种问题,而且百度根本不够用无奈上的外网很快解决了.在此分享一下. 一.pyth ...