根据 Oracle 文档,一个 NUMBER(5,0)
列可以容纳 Int16
和部分 Int32
值。我正在开发一个应用程序(使用 ODP.NET
)没有 Entity Framework
(EF),并且无法在 App.Config
中定义自定义映射 (edmMappings)文件。 ODP.NET
在非 EF 应用程序中不支持 edmMappings(至少它们被忽略)。
测试的 edmMappings:
-
<add NETType="int16" MinPrecision="4" MaxPrecision="5" DBType="Number" />
-
<add name="int16" precision="4" /> (note; next one is int32 which is using precision 9)
-
<add name="int16" value="edmmapping number(4,0)" /> (note; next one is int32 which is using precision 9)
这会导致应用程序出现“问题”,因为它在执行包含 NUMBER(5,0) 列的选择查询时需要 Int16 数据类型。
此刻,我只能想到下一个(不是首选)解决方案:
- 更改
NUMBER(5,0)
列到NUMBER(4,0)
. - 将(
NUMBER(5,0)
的)单元格值转换为Int32
(而不是预期的Int16
类型)。
是否有可能(总是)映射 NUMBER(5,0)
列到 Int16
(.NET 类型)?
(也许我不知道 OracleConnection、OracleDataAdapter 或 OracleDataReader 类的某个设置和/或字段)。
最佳答案
绝对不可能,原因很简单:number(5,0) 可以保存 -99999 到 99999 之间的任何整数,而 int16 只能保存 65536 个不同的值。没有足够的空间用于任何一对一映射。
请注意,这不是任何语言的限制——这在逻辑上是不可能的。
关于c# - Oracle 号码映射 (ODP.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57081616/