【问题标题】:Error mapping data type Oracle and C#映射数据类型 Oracle 和 C# 时出错
【发布时间】:2018-04-28 06:44:30
【问题描述】:

我有一个带有ID NUMBER(18) 的表,我有一个带有public Int64 ID { get; set; } 属性的类来映射ID 形式C# 与Oracle。

我的表定义

但是当我得到这样的最大 ID 时出现错误:

  1. 运行查询

    从 MYTABLE 中选择 MAX(ID) ID

    系统抛出错误:

    “'System.Decimal' 类型的对象无法转换为 'System.Int64' 类型。”

  2. 但是当我像这样运行查询时:

    从中选择 ID( 按 ID DESC 从 MYTABLE 订单中选择 ID ) 其中 ROWNUM =1

    没关系。

我不知道为什么(1)抛出错误,为什么(2)完成?

数据类型 (1) 和 (2) 有什么区别?

【问题讨论】:

  • @lad2025: 查询 1 和 2 返回相同的值,为什么 1 错误和 2 完成?
  • 请发布您的表格定义。看起来列元数据有问题

标签: c# oracle


【解决方案1】:

可能的情况 1:

我猜你的表中有 NULL 值(所以你的两个查询不等价):

SELECT MAX(ID) ID FROM T_00_RQMM  -- aggregate func ignore NULLS

但是:

SELECT ID FROM(SELECT ID FROM T_00_RQMM ORDER BY ID DESC) WHERE ROWNUM = 1;  
-- NULL is the max value

DBFiddle Demo

无论如何你应该尝试映射:

using System.Numerics;
...
public BigInteger ID { get; set; }

编辑:

可能的情况 2:

可能是数据类型有问题(然后使用显式CAST):

SELECT CAST(MAX(ID) AS NUMBER(18,0)) ID FROM T_00_RQMM 

DBFiddle Demo 2

完整演示:

CREATE TABLE T_00_RQMM (ID NUMBER(18,0));
INSERT INTO T_00_RQMM VALUES(NULL);
INSERT INTO T_00_RQMM VALUES(100);

CREATE TABLE t1 AS SELECT MAX(ID) ID FROM T_00_RQMM;

CREATE TABLE t2 AS SELECT ID FROM(SELECT ID FROM T_00_RQMM ORDER BY ID DESC) 
                                  WHERE ROWNUM = 1;

CREATE TABLE t3 AS SELECT CAST(MAX(ID) AS NUMBER(18,0)) ID FROM T_00_RQMM;


SELECT TABLE_NAME, COLUMN_NAME, DATA_PRECISION, DATA_SCALE
FROM all_tab_cols
where table_name in ('T1', 'T2', 'T3')
ORDER BY Table_name;

输出:

+------------+-------------+----------------+------------+
| TABLE_NAME | COLUMN_NAME | DATA_PRECISION | DATA_SCALE |
+------------+-------------+----------------+------------+
| T1         | ID          | null           | null       |
| T2         | ID          | 18             | 0          |
| T3         | ID          | 18             | 0          |
+------------+-------------+----------------+------------+

【讨论】:

  • 不,我已经仔细检查过了,它不为空。查询 1 和 2 返回相同的值。但是不知道为什么 1 抛出错误
  • @HongVanVit 好的,当使用MAX 数据类型为NUMBER 而不是NUMBER(18) 时,它看起来像元数据问题
猜你喜欢
  • 2012-06-16
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多