C# 映射数据类型Oracle和C时出错
我有一个ID为18的表,还有一个属性为public Int64 ID{get;set;}的类,它将ID表单C映射到Oracle 我的表格定义 但是当我得到max ID时,我有一个错误,如下所示: SELECT ID FROM( SELECT ID FROM MYTABLE ORDER BY ID DESC ) WHERE ROWNUM =1 运行查询 SELECT MAX(ID) ID FROM MYTABLE 系统将抛出一个错误: “System.Decimal”类型的对象无法转换为“System.Int64”类型 但当我像这样运行查询时: SELECT ID FROM( SELECT ID FROM MYTABLE ORDER BY ID DESC ) WHERE ROWNUM =1 没关系 我不知道为什么1抛出错误,为什么2抛出错误 数据类型1和2之间有什么区别?可能的场景1: 我猜表中有空值,所以这两个查询不相等:C# 映射数据类型Oracle和C时出错,c#,oracle,C#,Oracle,我有一个ID为18的表,还有一个属性为public Int64 ID{get;set;}的类,它将ID表单C映射到Oracle 我的表格定义 但是当我得到max ID时,我有一个错误,如下所示: SELECT ID FROM( SELECT ID FROM MYTABLE ORDER BY ID DESC ) WHERE ROWNUM =1 运行查询 SELECT MAX(ID) ID FROM MYTABLE 系统将抛出一个错误: “
SELECT MAX(ID) ID FROM T_00_RQMM -- aggregate func ignore NULLS
但是:
无论如何,您应该尝试映射:
using System.Numerics;
...
public BigInteger ID { get; set; }
编辑:
可能的情景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 |
+------------+-------------+----------------+------------+
@lad2025:查询1和查询2返回相同的值,为什么1出错,2完成?请发布您的表定义。看起来列metadataNo有问题,我已经仔细检查过了,它不是空的。查询1和查询2返回相同的值。但我不知道我为什么要扔error@HongVanVit好的,当使用MAX datatype是NUMBER而不是NUMBER18时,看起来像是元数据问题
+------------+-------------+----------------+------------+
| TABLE_NAME | COLUMN_NAME | DATA_PRECISION | DATA_SCALE |
+------------+-------------+----------------+------------+
| T1 | ID | null | null |
| T2 | ID | 18 | 0 |
| T3 | ID | 18 | 0 |
+------------+-------------+----------------+------------+