oracle中的“SELECT 1 FROM ...”返回一个十进制类型

时间:2009-11-26 04:55:37

标签: c# oracle

我在ORACLE下面的示例查询中获取了一个数据表 “选择1 AS X FROM ...”

当我使用dr.Field(“X”)选择X时,它给了我错误。 我发现它以十进制数据类型返回。

在MSSQL中使用相同的语句没有问题,我有int数据类型。

对此有任何解决方法或解决方案吗?

5 个答案:

答案 0 :(得分:3)

Oracle中的整数是一个精度为0的数字。由于您没有指定大小(可以大于16),它将被转换为十进制。

尝试将其强制转换为数字(16,0),你应该没问题。

对于建议使用ODP.NET的人:它会产生同样的问题。

答案 1 :(得分:2)

您的前端代码错误地自动检测字段的类型。您应该能够将其覆盖为整数。如果没有关于正在使用的语言/等的更多细节,则很难更具体。

答案 2 :(得分:2)

如果您知道该列的类型应该是 int 并假设它不是null:

int x = Convert.ToInt32 (dr.Field ["X"]);

这对于为该列返回 int 的其他数据库提供程序没有任何影响。

如果要更改Oracle查询以返回 int

SELECT CAST(1 AS INTEGER) FROM ...

答案 3 :(得分:1)

我家里没有我的Oracle书籍,但显式转换或转换为整数可能是要走的路。 (说到Oracle查询,而不是检索结果的C#,尽管你也可以在那里进行转换。)就“Oracle”而言,“1”是不明确的。

答案 4 :(得分:1)

为了获得int而不是小数,我需要做的是:

SELECT CAST(1为NUMBER(9,0))FROM Dual