gpt4 book ai didi

c# - DataReader 为数据库表浮点列返回不正确的 .net 数据类型

转载 作者:太空狗 更新时间:2023-10-29 23:42:57 27 4
gpt4 key购买 nike

我在 Oracle SQL Developer 中有 1 个表,其中包含 1 个作为 Float 的列Data reader 应该返回 Decimal for oracle float 数据类型 作为根据此处给出的表格:https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/oracle-data-type-mappings

但问题是 datareader 为 Float Column 返回 double as datatype,如下所示:enter image description here

但问题是 datareader 为 NREAL as FloatNFLOAT1 as float 返回 double 作为数据类型,令人惊讶的是datareader 返回 Decimal for both column 如下所示:

enter image description here

代码:

static void Test()
{
using (OracleConnection connection = new OracleConnection("connection string")
{
connection.Open();
using (OracleCommand command = connection.CreateCommand())
{
command.CommandText = "select id , NFLOAT from Numeric_Table";
using (OracleDataReader reader = command.ExecuteReader())
{
for (int i = 0; i < reader.FieldCount; i++)
{
var columnName = reader.GetName(i);
var dotNetType = reader.GetFieldType(i);
var sqlType = reader.GetDataTypeName(i);
}
}
}
}
}

我正在使用:Oracle.ManagedDataAccess.Client

这是 Oracle.ManagedDataAccess.Client 库 中的错误还是我做错了什么?

更新:根据评论,我想提一下:

虽然我可能引用了不适用于我正在使用的 oracle 库的不同源文档,但我仍然为我的其他 2 列(即 NREAL 和 NFLOAT1)获取十进制数据类型,所以为什么这种行为不一致?

最佳答案

FLOAT 数据类型并不是这里的全部。 SQL Developer 没有向您显示 NFLOAT 的精度小于 50,而 NREALNFLOAT1 的精度为 50 或更高。创建时未指定,精度默认为 126,即 the highest possible precision for the FLOAT data type .

一个简单的测试查询将展示差异:

SELECT CAST(0 AS FLOAT(49)), CAST(0 AS FLOAT(50)) FROM DUAL

第一列将作为 System.Double 返回。第二个将作为 System.Decimal 返回。

在 SQL Developer 中,右键单击表并选择“编辑...”该对话框确实显示列的定义精度。

如果您希望 NFLOAT 作为 System.Decimal 返回,请将精度至少提高到 50。


我最近一直在梳理文档并运行我自己的测试。这是一个宠物项目,我不经常使用 Oracle,所以有很多试验和错误。 DUMP 函数非常有助于在查看 ODP .NET 对其执行的操作之前确定表达式中的数据类型是否正确。

有关 ODP .NET 如何根据精度返回不同数据类型的另一个示例,请考虑 NUMBER(p,0)

Type     Min p    Max p
---------------------------
Int16 1 4
Int32 5 9
Int64 10 18
Decimal 19 38

我希望当 p 为 1 或 2 时返回 ByteSByte 但没有成功。

关于c# - DataReader 为数据库表浮点列返回不正确的 .net 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55825566/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com