oracle NUMBER(1) 与 c# bool 的奇葩问题

最近公司的一个项目,在本地调试都ok,但一发布到测试环境就报异常:

MessageText=System.ArgumentException: Value does not fall within the expected range.
at Oracle.DataAccess.Client.OracleParameter.set_Value(Object value)
at IBatisNet.DataMapper.TypeHandlers.Nullables.NullableBooleanTypeHandler.SetParameter(IDataParameter dataParameter, Object parameterValue, String dbType)
at IBatisNet.DataMapper.Configuration.ParameterMapping.ParameterMap.SetParameter(ParameterProperty mapping, IDataParameter dataParameter, Object parameterValue)
at IBatisNet.DataMapper.Commands.DefaultPreparedCommand.ApplyParameterMap(ISqlMapSession session, IDbCommand command, RequestScope request, IStatement statement, Object parameterObject)
at IBatisNet.DataMapper.Commands.DefaultPreparedCommand.Create(RequestScope request, ISqlMapSession session, IStatement statement, Object parameterObject)
at IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteInsert(ISqlMapSession session, Object parameterObject)
at IBatisNet.DataMapper.SqlMapper.Insert(String statementName, Object parameterObject)
at Framework.Zhaogang.Data.DbContext.Insert(String statementName, Object parameterObject)
at Framework.Zhaogang.Data.Dao`1.Insert(TEntity entity)
at Feature.Zhaogang.Settlement.Application.Biz.CostaccountingBiz.AddFinInStorageAndItems(List`1 finInStorageEntityList, String& msg, List`1& idCodeResultList)

经过一步步排查,最后确定是 代码的实体中用了bool值,但oracle用的是NUMBER(1) 导致的。而本地和测试服务器配置文件中用的oracle驱动版本不同,一个4.0,一个11.2,结果是本地api功能ok,服务器api异常。

最后把bool型的属性都改为long才解决的。

时间: 2024-08-05 06:59:22

oracle NUMBER(1) 与 c# bool 的奇葩问题的相关文章

Oracle number类型查询精度丢失的解决方法

Oracle number类型查询时,有时候会遇到精度丢失的问题,下面为您介绍了一个解决Oracle number类型查询精度丢失的方法,供您参考. 一.Oracle number类型查询需求中要求查到一个字段的值然后保持小数点后2位//如果采用如下方法从ResultSet得到一个数字,而这个数字大于40000,则得到的数据将不准确 floatzcxxhj+=rss.getFloat(3); //而如果采用double就没有问题 doublezcxxhj+=rss.getDouble(3); /

ORACLE NUMBER类型Scale为0引发的问题

今天遇到了一个很有意思的NUMBER类型Scale引发的问题,我用一个简单的测试用例来展示一下这个案例.假如有个TEST的表,有个字段类型为NUMBER,我插入下面两条数据 CREATE TABLE TEST (      Category VARCHAR(12),      QTY  NUMBER )   INSERT INTO TEST SELECT 'M', 12 FROM DUAL UNION ALL SELECT 'C', 0.99999999999999999 FROM DUAL;

oracle number对应java数据类型BigDecimal

 最近做数据库查询的时候遇到一个问题,数据库中为number类型的字段,在java类型中对应的有Integer和BigDecimal都会出现: 经测试发现当数据库为sql server和DB2时,用getObject()取出来时Integer类型,但是oracle 中取出来就会是Integer或者BigDecimal类型.原因是oracle与java类型对应于number长度有关,下面引用百度文库@skycity521的文库截图 遇到该类型问题,若要判断每个数据库和数据库字段长度不同对应的jav

Oracle number类型 的最大值是多少

Oracle的NUMBER类型最多由三个部分构成,这三个部分分别是最高位表示位.数据部分.符号位.其中负数包含符号位,正数不会包括符号位.另外,数值0比较特殊,它只包含一个数值最高位表示位80,没有数据部分. 正数的最高位表示位大于80,负数的最高位表示位小于80.其中一个正数的最高位是个位的话,则最高位表示位为C1,百位.万位依次为C2.C3,百分位.万分为依次为C0.BF.一个负数的最高位为个位的话,最高位表示位为3E,百位.万位依次为3D.3C,百分位.万分位依次为3F.40. 数据部分每

oracle number类型

NUMBER类型详细介绍: 在Oracle中Number类型可以用来存储0,正负定点或者浮点数,可表示的数据范围在 1.0 * 10(-130) -- 9.9...9 * 10(125) {38个9后边带88个0} 的数字,当Oracle中的数学表达式的值>=1.0*10(126)时,Oracle就会报错. Number的数据声明如下: 定点数的精度(p)和刻度(s)遵循以下规则: 当一个数的整数部分的长度> p-s 时,Oracle就会报错 当一个数的小数部分的长度> s 时,Orac

JavaScript基础 NaN:number 类型,转成bool类型是 :false Boolean()系统函数

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

Oracle data type number

Oracle number NUMBER [ (p [, s]) ] Number having precision p and scale s. Theprecision p can range from 1 to 38. The scale s can range from -84 to 127. Bothprecision and scale are in decimal digits. A NUMBER value requires from 1 to 22bytes. scale是可选

ORACLE 中NUMBER类型默认的精度和Scale问题

在ORACLE数据库中,NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10^-130~10^126(不包含此值),需要1~22字节(BYTE)不等的存储空间.P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字.S是Scale的英文缩写,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数.有时候,我们在创建表的时候,NUMBER往往没有指定P,S的值,那么默认情况下,NUMBER的P.S的值分别是多少呢?相信这个问

oracle的number的浅析

author:skate time:2011-02-14 oracle的number的浅析 从例如以下几个方面来认识number 1.表示的数值范围   2.占用的存储空间   3.number的性能 我们日常主要定义数值存储列是大都是用number,只是oracle也兼容一些以他类型,例如以下: NUMERIC(p,s):全然映射至NUMBER(p,s).假设p未指定,则默觉得38.DECIMAL(p,s)或DEC(p,s):全然映射至NUMBER(p,s).假设p为指定,则默觉得38.INT